NSObject在layoutSubviews之后发布

时间:2011-09-07 13:38:25

标签: iphone objective-c ios cocoa ipad

首先,我有一个继承自NSObject

的类
@interface Role : NSObject{ /*...*/ } @end

还有一个属性可存储Role类的瞬间指针。

@property (nonatomic, retain) Role * role;

现在创建UIView时,我会初始化Role类的瞬间。

Role * r = [[Role alloc] init];
role = r;
[r release];

据我所知,属性role标有retian,然后在我设置值时自动增加引用计数,并在属性设置为nil时减少引用计数申请退出。

一切都很好但是当我运行应用程序时,我发现我将获得EXC_BAD_ACCESS异常。

我添加了NSLog,这是因为在Role电话released之后dealloced广告已经UIViewlayoutSubviews,我可以不明白为什么会发生这种情况,因为我现在没有任何代码release

我目前暂时的解决方案是:我注释掉了[r release]

如果layoutSubviews有一些我不知道的背景,请有人给我一些解释吗?

由于

2 个答案:

答案 0 :(得分:3)

您正在直接访问您的ivar。这应该是:

self.role = r;

避免直接访问您的ivars;始终使用访问者,initdealloc除外。

答案 1 :(得分:2)

您实际应该 调用属性“setter方法”以保留值

self.role = r;

[self setRole:r];