释放对象时如何自动设置nil

时间:2011-12-05 17:06:40

标签: objective-c

我的知识设置nilrelease时变量,这总是一个好主意或没有区别。但这绝不是一个坏主意。

因此,要将nil设置为我们必须执行的对象:

[object release];
object=nil;

但这是2行。我总是要记住这样做。那么,在释放对象时有一种自动设置nil的方法吗?

一个简单的想法是:

#define release(VAR) [VAR release]; VAR=nil;
release(object);

但是有了这个,我将不得不更改所有文件中的代码,并且以这种方式更改代码不是一个好主意,因为它不是objective-c的“自然”方式。有人知道另一招吗?

3 个答案:

答案 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;