【发布时间】:2013-12-27 16:58:25
【问题描述】:
我有点困惑是否应该释放我在接口中声明为“保留”的对象,然后在我的实现的 init 方法中保留它以避免对象被破坏。
接口:LoginManager.h
@property (nonatomic, retain) LoginViewController *loginView;
实现:LoginManager.m
- (id)init{
self = [super init];
if (self) {
loginView = [[LoginViewController alloc] initWithNibName:nil bundle:nil];
[loginView initDetails];
[loginView retain];
}
return self;
}
我将此作为 ARC 项目,并将 'LoginManager' 设为非 ARC,只是为了保留 loginView。
如果我不保留 loginView 我的对象已经消失了,即使我将它保留在接口文件中,所以我在 'init' 中明确保留它> 但是我应该在哪里发布呢?
我是否应该自动释放它,然后在我的 dealloc 中释放它,因为它有时会给出双重免费错误,我怀疑这是因为这个 LoginManager 类:
loginView = [[[LoginViewController alloc] initWithNibName:nil bundle:nil] autorelease];
...
-(void)dealloc{
[loginView release];
}
谢谢
【问题讨论】:
-
为什么禁用 ARC?
-
我没有禁用 ARC,只是从 ARC 中排除了 LoginManager
-
是的,但你为什么要这么做?
-
如果我没有在使用之前销毁对象。所以为了强行保留它,我这样做是因为你不能在 ARC 项目中保留
-
@duci9y 是的,这就是我在之前的评论中告诉 OP 的内容。
标签: ios iphone memory-management