0
 -(NSString*)readTextColumnWithIndex:(int)index {
    char* val = (char *)sqlite3_column_text(statement,index);
    if (val==NULL) {
        return nil;
    }
    return [NSString stringWithUTF8String:val];
}

我在返回时 100% 泄漏 [NSString stringWithUTF8String:val];。不知道如何修复它们。我相信只有 alloc、retain 等可能会导致内存泄漏。任何帮助是极大的赞赏。

4

2 回答 2

0

[NSString stringWithUTF8String:val]是创建泄漏对象的语句 - 你需要看看它接下来会发生什么。

您是否保留了某处NSString返回的内容?readTextColumnWithIndex:

于 2012-07-02T14:10:27.077 回答
0
-(NSDictionary*)loadDataRow:(SqlQuery*)q {

    return [NSDictionary dictionaryWithObjectsAndKeys:      [NSString stringWithFormat:@"%d",[q readIntColumn]],
        @"TOCID",[q readTextColumn],@"SubChapter_Name",[q readTextColumn],
        @"HtmlFileName",[q readTextColumn],@"ImageName",[q readTextColumn],
        @"RefsTitleSection",[NSString stringWithFormat:@"%d",
                             [q readIntColumn]],@"PageId",
        nil];

}

这就是它的名称。readIntColumn 依次调用 readTextColumnWithIndex 和 NSDictionary 返回给调用者方法

chap_Arr = nil;
while([query step]) {
    ChapName = [query readTextColumn];
     chap_Arr = [mData objectForKey:ChapName];
    if (!chap_Arr) {
        chap_Arr = [[[NSMutableArray alloc] init] autorelease];
        [mData setObject:chap_Arr forKey:ChapName];
    }

    [chap_Arr addObject:[self loadDataRow:query]];

}

我不确定如何在循环中释放 chap_Arr。我在 dealloc 中有一个 RELEASE_SAFELY。

于 2012-07-03T03:59:10.533 回答