繁体   English   中英

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

[英]What happens exactly, when I set an property to nil in the dealloc method?

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

我猜将要调用某种虚拟的二传手。 但是这里到底发生了什么? 为什么没有?

您应该知道,该属性只是语法糖。

例如:

@property(nonatomic, retain) NSString *myString;

将转换为

- (NSString*)myString { 
    return myString; 
}

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

因此,如果您以@方式声明@property,它实际上会释放

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

self.myOutletProperty = nil; 与[myOutletProperty版本]相同;

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

self.myOutletProperty = nil; 没做什么

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

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

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

因此,您只需从某个属性中删除一个对象。 含义取决于您在说什么属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM