我是否应该在接口中释放已声明为“保留”的对象,然后在实现的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来“强制保留”对象,您需要跟踪实际的错误。如果您不这样做,很可能原始错误仍然存在,等待您进一步破坏一天。这是调试的噩梦。
重新启用ARC并修复第一个错误。如果您无法找到问题,请将另一个问题发布到Stack Overflow。