首先,我有一个继承自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
广告已经UIView
和layoutSubviews
,我可以不明白为什么会发生这种情况,因为我现在没有任何代码release
。
我目前暂时的解决方案是:我注释掉了[r release]
如果layoutSubviews
有一些我不知道的背景,请有人给我一些解释吗?
由于
答案 0 :(得分:3)
您正在直接访问您的ivar。这应该是:
self.role = r;
避免直接访问您的ivars;始终使用访问者,init
和dealloc
除外。
答案 1 :(得分:2)
您实际应该 调用属性“setter方法”以保留值 。
self.role = r;
或
[self setRole:r];