[self.property release]和[property release]之间的区别

时间:2010-07-02 08:33:26

标签: iphone

任何人都可以告诉我[self.property release][property release]之间的区别。我问这个是因为在我的应用程序中的一个视图控制器中,我正在执行[self.property release]并将此视图控制器推入导航堆栈,当我弹出此视图控制器时它显示错误EXC_BAD_INSTRUCTION但是当我做[property release]一切正常...?任何人都可以告诉我哪里出错了。我是iPhone应用程序开发的新手。

2 个答案:

答案 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,所以基本上你可能会发布一个与你认为的对象不同的对象。