[英]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.