我的知识设置nil
到release
时变量,这总是一个好主意或没有区别。但这绝不是一个坏主意。
因此,要将nil设置为我们必须执行的对象:
[object release];
object=nil;
但这是2行。我总是要记住这样做。那么,在释放对象时有一种自动设置nil的方法吗?
一个简单的想法是:
#define release(VAR) [VAR release]; VAR=nil;
release(object);
但是有了这个,我将不得不更改所有文件中的代码,并且以这种方式更改代码不是一个好主意,因为它不是objective-c的“自然”方式。有人知道另一招吗?
答案 0 :(得分:2)
我认为你最好只编写两条线,这是正常的。那么至少你的代码对其他任何必须在以后维护它的人都有意义。
答案 1 :(得分:2)
你几乎不需要这样做。如果您在整个代码中都有这个,但是dealloc你没有正确使用访问器方法。
如果你这样做,
- (void)dealloc {
[foo release];
foo = nil;
[super dealloc];
}
foo = nil;
行给你带来了什么?我唯一能想到的是它可能隐藏了你之前发现的错误。
所以,不,我不会说这绝不是坏事。
答案 2 :(得分:2)
如果您的对象是保留属性:
<强>·H 强>
@property(nonatomic, retain) NSObject *object
<强>的.m 强>
@synthesize object;
您需要做的就是致电:
self.object = nil;
实际上,生成的setter负责为您执行发布,因此上面的一行等同于编写
[object release];
object=nil;