【发布时间】:2009-04-24 10:06:27
【问题描述】:
例子
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
我猜会调用某种虚拟二传手。但是这里到底发生了什么?为什么是零?
【问题讨论】:
-
在任何意义上都不需要它是“虚拟的”。调用-dealloc时,对象依然存在。
标签: objective-c iphone cocoa-touch
例子
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
我猜会调用某种虚拟二传手。但是这里到底发生了什么?为什么是零?
【问题讨论】:
标签: objective-c iphone cocoa-touch
您应该知道,该属性只是语法糖。
例如:
@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 release]相同;
2.如果属性类型为“assign”,则
self.myOutletProperty = nil;什么都不做
【讨论】:
要记住的一件事是,即使将您的属性设置为 nil 也可以正常工作,我建议您改为在您的 dealloc 方法中调用 [object release]。这样,如果您编写我们自己的 setter 方法来引用另一个 ivar(可能已经发布),或者您在其他地方的该属性上注册了 KVO 通知,那么您是安全的。
【讨论】:
Nil 与 null 相同,但用于对象。这意味着没有对象。
点语法与调用 [self setMyOutletProperty:nil] 相同。
因此,您只需从某个属性中删除一个对象。含义取决于您所谈论的属性。
【讨论】: