2009-07-22 18 views
4

在一些代码,我有时会看到这一点:是否需要删除指定的变量?

@property (nonatomic, assign) NSObject *foo; 

... 

-(void)dealloc 
{ 
    self.foo = nil; 
    ... 
} 

真的有必要到零的对象时,它并没有被保留下来?这不会造成问题吗?

回答

3

将不再感兴趣的指针设置为零是一种很好的做法。我不主张在-dealloc中使用像这样的访问器,因为可能的访问者副作用(如发布通知或KVO),但这是一个有争议的位置,Apple在他们自己的代码中不一致。无论如何,这是一个很好的做法,可以删掉你的指针。它肯定不会造成问题,并且在-dealloc中删除指针的习惯将为您节省将来的重大错误。

在这个特定的情况下,它可能不是必要的,但是你提出什么样的问题?

+1

我只是想知道是否需要,所以我可以避免未知的错误,很多头痛。我困惑的一件事是如何分配变量。我认为,当我将self.foo分配给nil时,是否将分配给它的另一个假设变量设置为nil?我很难解释我的问题,所以请让我知道如果你明白:) – Meroon 2009-07-22 03:50:20

2

假设它是一个合成访问器,在dealloc中没有必要去做。早些时候,如果你不想再与对象交谈,你可能会把它忘掉。不过,我看不出会有什么问题。

如果它不是一个合成存取器,那么setter也可能以某种方式影响反转关系,在这种情况下,可能需要将其设置为零,以便告知foo您不会再处于其他位置。

3

assign属性不必在-dealloc中将其ivar设置为nil。

在-dealloc中设置伊娃为零无害。使用公共访问器将属性设置为dealloc中的nil([self setFoo:nil]或self.foo = nil)可能会产生不必要的副作用。

相关问题