时间:2016-09-17 15:04:13

标签: objective-c exc-bad-access ios10

我的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对象。如何引用您自己类中的方法可能会导致错误的访问错误,并且仅在发布模式下?

PS:当我使用NSZombieEnabled = YES运行时,该应用运行良好。

1 个答案:

答案 0 :(得分:1)

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

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