我有点困惑我是否应该释放一个我在接口(interface)中声明为“保留”的对象,然后在我的实现的 init 方法中保留它以避免对象被销毁。
接口(interface):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。
关于ios - 我应该释放声明为属性并在实现中保留的 Class 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20490019/