Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在LayoutSubView之后释放NSObject_Iphone_Objective C_Ios_Cocoa_Ipad - Fatal编程技术网

Iphone 在LayoutSubView之后释放NSObject

Iphone 在LayoutSubView之后释放NSObject,iphone,objective-c,ios,cocoa,ipad,Iphone,Objective C,Ios,Cocoa,Ipad,首先,我有一个继承自NSObject @interface Role : NSObject{ /*...*/ } @end 还有一个属性用于存储角色类的即时指针 @property (nonatomic, retain) Role * role; Role * r = [[Role alloc] init]; role = r; [r release]; 现在,当创建ui视图时,我初始化角色类的一个瞬间 @property (nonatomic, retain) Role * role;

首先,我有一个继承自
NSObject

@interface Role : NSObject{ /*...*/ } @end
还有一个属性用于存储
角色
类的即时指针

@property (nonatomic, retain) Role * role;
Role * r = [[Role alloc] init];
role = r;
[r release];
现在,当创建
ui视图
时,我初始化
角色
类的一个瞬间

@property (nonatomic, retain) Role * role;
Role * r = [[Role alloc] init];
role = r;
[r release];
据我所知,属性
角色
标记为
retian
,然后当我设置值时,它会自动增加引用计数,当应用程序退出时,属性设置为nil时,它会减少引用计数

一切看起来都很好,但当我运行应用程序时,我发现我将得到EXC\u BAD\u访问异常

我添加了
NSLog
,这是因为在
UIView
调用
layoutSubviews
之后,
角色
即时已被
释放
,我无法理解为什么会发生这种情况,因为我没有任何代码可以
立即释放

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

如果
布局子视图
有一些背景我不知道,有人能给我一些解释吗


谢谢

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

self.role = r;

避免直接访问IVAR;始终使用访问器,除非在
init
dealloc

中直接访问ivar。这应该是:

self.role = r;

避免直接访问IVAR;始终使用除
init
dealloc
之外的访问器您实际上应该调用属性“setter method”来保留值

self.role = r;


实际上,您应该调用属性“setter method”来保留该值

self.role = r;


为了使物业正常运行,您需要使用它。。。因此,使用self.role=r;为了使物业正常运行,您需要使用它。。。因此,使用self.role=r;