【发布时间】:2011-06-06 13:10:03
【问题描述】:
我正在使用 Objective-C 在我的 linux 上玩一点。实际上我正在努力学习它,但在完成这个任务时,我被卡住了。
代码如下:
#import <stdio.h>
#import <Foundation/NSObject.h>
int main(void) {
NSObject *a = [[NSObject alloc] init];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a retain];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a release];
printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n\n", (a==nil));
[a release];
//printf("Class retain count: %i\n", [a retainCount]);
printf("Is pointer nil: %i\n", (a==nil));
return 0;
}
这是输出:
类保留计数:1
指针为零:0
类保留数:2
指针为零:0
类保留计数:1
指针为零:0
指针为零:0
我已经注释掉了最后一个 printf,因为它使程序崩溃(我得到“分段错误 obj/test”,因为 a 没有设置为 nil ...)。那么我做错了什么?为什么指针不设置为 nil ?它只是保持它的旧值(在对象被删除之前)......
【问题讨论】:
-
retainCount 没用。不要叫它。
-
@bbum:你能解释一下原因吗?
-
对象的保留计数是一个内部实现细节,通常没有意义(试试
[@"foo" retainCount])。 stackoverflow.com/questions/4636146/when-to-use-retaincount -
既然是 2014 年,你应该使用 ARC,它彻底改变了一切。
标签: objective-c pointers object null