- (id)init {
if (self == [super init]) {
entries = [[NSMutableArray alloc] init];
NSString *file = [[NSBundle mainBundle] pathForResource:@"qanda" ofType:@"db"];
sqlite3 *database = NULL;
if (sqlite3_open([file UTF8String], &database) == SQLITE_OK) {
sqlite3_exec(database, "select * from qanda order by question", LoadEntriesCallback, entries, NULL);
}
sqlite3_close(database);
}
return self;
}
在条目对象附近泄漏:'self'时使用的实例变量未设置为[super of self [init ...]]
的结果在自我附近泄漏:返回而'self'未设置为[super of self [init ...]]
的结果答案 0 :(得分:1)
你应该
self = [super init];
不是
self == [super init];
最常用的模式是:
self = [super init];
if (self) {
// Initialisation code
}
return self;
在你的例子中,你没有将[super init]的结果分配给任何东西,而是悬挂,因此泄漏和消息。
如果您想根据标题中的问题发布条目:
entries = [[[NSMutableArray alloc] init] autorelease];
或
entries = [[NSMutableArray alloc] init];
和
[entries release];
在return
之前或dealloc
之前。
答案 1 :(得分:0)
您可以通过替换:
来发布条目entries = [[NSMutableArray alloc] init];
with:
entries = [[[NSMutableArray alloc] init] autorelease];
但我认为问题应该是:这是从数据库中获取内容的好方法吗?坦率地说,如果您将读取内容从数据库部分移动到loadData
方法,我认为您的代码会更好
答案 2 :(得分:0)
你应该在创建时自动发布它。
entries = [[[NSMutableArray alloc] init] autorelease];
答案 3 :(得分:0)
尝试替换
entries = [[NSMutableArray alloc] init];
与
self.entries = [[[NSMutableArray alloc] init]autorelease];
并替换
sqlite3_exec(database, "select * from qanda order by question", LoadEntriesCallback, entries, NULL);
与
sqlite3_exec(database, "select * from qanda order by question", LoadEntriesCallback, self.entries, NULL);