首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[self.property release]和[property release]的区别

[self.property release]和[property release]的区别
EN

Stack Overflow用户
提问于 2010-07-02 16:33:26
回答 2查看 781关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-02 18:12:52

属性释放将释放消息发送到属性实例变量,这几乎肯定是您想要做的事情。

self.property release向self.property返回的对象发送release消息。这将取决于属性是否被定义为assign / copy / retain,因此基本上您可能正在释放一个与您认为自己不同的对象。

票数 3
EN

Stack Overflow用户

发布于 2010-10-14 11:49:39

区别在于self.myProperty是实例变量myProperty的访问器方法。访问器方法由@synthesize生成,或者可以显式定义为

代码语言:javascript
复制
-(Type*) myProperty; 
-(void) setMyProperty:(Type*)p;

因此,假设您已经将访问器定义为(键是retain)

代码语言:javascript
复制
@property (retain) Type* myProperty;

然后

代码语言:javascript
复制
[myProperty release]; 
myProperty = nil;

等同于

代码语言:javascript
复制
self.myProperty = nil;

通常,将释放的对象设置为零是一种好的做法,这样您就不会意外地尝试使用(或过度释放)它们。

没有充分的理由调用[self.property release]

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档