我是否应该在接口中释放已声明为“保留”的对象,然后在实现的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。

10-08 07:46