当我在dealloc方法中将属性设置为nil时,究竟会发生什么?

时间:2009-04-24 10:06:28

标签: objective-c iphone cocoa-touch

实施例

-(void)dealloc {
    self.myOutletProperty = nil;
    [super dealloc];
}

我想会调用一种虚拟设置器。但到底发生了什么?为什么没有?

4 个答案:

答案 0 :(得分:12)

你应该知道,这个属性只是语法糖。

例如:

@property(nonatomic, retain) NSString *myString;

将转换为

- (NSString*)myString { 
    return myString; 
}

- (void)setMyString:(NSString*)newString {
    if (myString != newString) {
        [myString release];
        myString = [newString retain];
    }
}

所以如果你声明了@property,那么它实际上会释放

答案 1 :(得分:7)

1.如果属性类型为“复制”或“保留”,则

self.myOutletProperty = nil;与[myOutletProperty release];

相同

2.如果属性类型为“assign”,则

self.myOutletProperty = nil;什么都不做

答案 2 :(得分:2)

要记住的一件事是,即使将您的属性设置为nil也能正常工作,我建议您在dealloc方法中调用[object release]。这样,如果您编写我​​们自己的引用另一个ivar(可能已经发布)的setter方法,或者您在其他地方注册了该属性的KVO通知,那么您就是安全的。

答案 3 :(得分:1)

Nil与null相同,但对于对象。这意味着没有对象。

Dot语法与调用[self setMyOutletProperty:nil]相同。

所以你只需从某个属性中删除一个对象。含义取决于你所谈论的属性。