EXC_BAD_ACCESS 关于 class 中的方法

EXC_BAD_ACCESS on method in class

我的 SQLiteManager.m 实现中有以下方法。警告:旧遗留代码警报

- (void)dealloc {
    [super dealloc];
    if (db != nil) {
        [self closeDatabase];
    }
    [databaseName release];
}

- (NSError *) closeDatabase 
{    
    NSError *error = nil;
    if (db != nil) {
            // Set and log error somewhere, not relevant here
        }
        db = nil;
    }
    return error;
}

当我 运行 我的应用程序在 iOS 10 iPad 处于调试模式时,它 运行 没问题。当我 运行 我的应用程序在 iOS 10 iPad 上处于发布模式时(具有开发证书和配置文件),应用程序在 [self closeDatabase]; 行崩溃,返回 EXC_BAD_ACCESS.我在我的控制台中看到 self 仍然是一个 SQLiteManager 对象。怎么可能在你自己的 class 中引用一个方法会导致错误的访问错误,而且只在发布模式下?

PS:当我 运行 和 NSZombieEnabled = YES 时,应用 运行 没问题。

我找到了答案。我不得不将调用 [super dealloc]; 置于覆盖的 dealloc 方法的末尾。

- (void)dealloc
{
    if (db != nil) {
        [self closeDatabase];
    }
    [databaseName release];
    [super dealloc];
}