ios - 我应该释放声明为属性并在实现中保留的 Class 对象吗?

标签 ios iphone memory-management

我有点困惑我是否应该释放一个我在接口(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/

相关文章:

c - malloc 返回内存的空闲范围

iphone - UIImagePickerController subview 未调用委托(delegate)。用作 modalViewController

objective-c - 获得正确的 NSDate 值——这是最有效的方法吗?

iphone - 由于 CALayer 边界包含 NaN : [0 0; nan 20] 导致崩溃

ios - swift : Disable FrontViewController when Rear is Displayed

c++ - 复制分配构造函数中的 aligned_alloc 内存块在释放时崩溃

ios - iOS 中的 FCM 通知在收到时不播放声音

ios - 如何使用 SCNRender 将 ARKit 集成到 GPUImage 渲染中?

ios - 如果某些字符串为空,如何在 nsmutablearray 中添加字符串对象

c++ - 可以在功能上防止 ram Controller 闲置吗?