我的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
运行时,该应用运行良好。
答案 0 :(得分:1)
我找到了答案。我不得不将调用[super dealloc];
置于被覆盖的dealloc
方法的末尾。
- (void)dealloc
{
if (db != nil) {
[self closeDatabase];
}
[databaseName release];
[super dealloc];
}