实施例究竟发生了什么,当我在dealloc方法中将属性设置为nil时?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
我想,一个排序的虚拟设定器将被调用。但是到底发生了什么?为什么零?
实施例究竟发生了什么,当我在dealloc方法中将属性设置为nil时?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
我想,一个排序的虚拟设定器将被调用。但是到底发生了什么?为什么零?
无与null相同,但是对于对象。它意味着没有对象。
点语法与调用[self setMyOutletProperty:nil]相同。
所以你只是从一些属性中删除一个对象。意义取决于你正在谈论的财产。
1.如果属性类型是 “复制” 或 “保持”,然后
self.myOutletProperty =零;与[myOutletProperty发布]相同;
2.如果属性类型是 “分配”,然后
self.myOutletProperty =零;什么都不做
你应该知道,那个属性只是语法糖。
例如:
@property(nonatomic, retain) NSString *myString;
将转换为
- (NSString*)myString {
return myString;
}
- (void)setMyString:(NSString*)newString {
if (myString != newString) {
[myString release];
myString = [newString retain];
}
}
所以如果你不是这样@财产申报,但实际上释放
有一点要记住的是,即使尽管将你的属性设置为零可以正常工作,但我建议在你的dealloc方法中调用[object release]
。如果您编写自己的setter方法来引用另一个ivar(可能已经发布),或者您在其他地方在该属性上注册了KVO通知,那么这种方法就很安全。
从任何意义上说,它都不需要是“虚拟的”。当调用-dealloc时,该对象仍然存在。 – 2009-04-24 14:01:00