任何人都可以告诉我[self.property release]
和[property release]
之间的区别。我问这个是因为在我的应用程序中的一个视图控制器中,我正在执行[self.property release]
并将此视图控制器推入导航堆栈,当我弹出此视图控制器时它显示错误EXC_BAD_INSTRUCTION
但是当我做[property release]
一切正常...?任何人都可以告诉我哪里出错了。我是iPhone应用程序开发的新手。
答案 0 :(得分:4)
区别是self.myProperty
是实例变量myProperty
的访问器方法。访问器方法由@synthesize
生成,或者可以明确定义为
-(Type*) myProperty;
-(void) setMyProperty:(Type*)p;
因此,假设您已将访问者定义为(密钥保留)
@property (retain) Type* myProperty;
然后
[myProperty release];
myProperty = nil;
相当于
self.myProperty = nil;
通常,将释放的对象设置为nil是一种好习惯,这样您就不会意外地尝试使用(或过度释放)它们。
没有充分的理由致电[self.property release]
。
答案 1 :(得分:3)
[property release]将释放消息发送到属性实例变量,几乎可以肯定你想做什么。
[self.property release]将释放消息发送到self.property返回的对象。结果将取决于属性是否定义为assign / copy / retain,所以基本上你可能会发布一个与你认为的对象不同的对象。