2012-07-16 31 views
0
- (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; 
} 

泄漏附近条目对象:使用实例变量,而“自我”未设置为结果[自[INIT的超...]]我怎样才能释放条目对象

附近自我泄漏:返回,而 '自我' 未设置为结果[自[INIT的超...]]

+0

更换

sqlite3_exec(database, "select * from qanda order by question", LoadEntriesCallback, entries, NULL); 

如果它解决了您的问题(答案旁边的勾号),请不要忘记接受答案,因为这样可以提高您的声誉和回答人的声誉。 – 2012-07-17 06:16:04

回答

0

您可以通过替换释放条目:

entries = [[NSMutableArray alloc] init]; 

有:

entries = [[[NSMutableArray alloc] init] autorelease]; 

但我认为这个问题应该是:这是一个从db获取内容的好方法,坦率地说,如果将读取内容从db部分移动到loadData方法,我认为您的代码会更好。

+0

嗨werner谢谢你。 – gangadhar 2012-07-16 13:50:12

+0

如果我释放bu自动释放应用程序崩溃实际上内存泄漏错误是使用实例变量,而自身未设置为[[(super或self)] init ...]的结果;在'init'方法中,你应该使用'self'来使用 – gangadhar 2012-07-16 13:52:06

+0

。条目' – werner 2012-07-16 14:01:17

0

创建时应该自动释放它。

entries = [[[NSMutableArray alloc] init] autorelease]; 
+0

谢谢你,如果我释放自动释放应用程序崩溃实际上内存泄漏错误是使用实例变量,而自我未设置为[[(super或self)] init的结果...] – gangadhar 2012-07-16 13:54:55

1

你应该有

self = [super init]; 

self == [super init]; 

使用最常见的模式是:

self = [super init]; 
if (self) { 
    // Initialisation code 
} 
return self; 

在你的榜样,你不分配的结果[超级初始化]任何事情和我t被挂起,因此泄漏和消息。

如果你想释放你的标题条目,每一个问题:

entries = [[[NSMutableArray alloc] init] autorelease]; 

entries = [[NSMutableArray alloc] init]; 

[entries release]; 

return之前或在您的dealloc

0

尝试

self.entries = [[[NSMutableArray alloc] init]autorelease]; 

更换

entries = [[NSMutableArray alloc] init]; 

sqlite3_exec(database, "select * from qanda order by question", LoadEntriesCallback, self.entries, NULL); 
+0

非常感谢。现在靠近条目漏洞被释放。但是最后一行返回自我给出了泄漏,因为它没有设置为'[(自己的超级初始化...“)的结果; – gangadhar 2012-07-17 05:39:29