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

return [NSString stringWithUTF8String:val]; で 100% リークがあります。それらを修正する方法がわからない。メモリリークが発生する可能性があるのは、割り当て、保持などだけだと思います。どんな助けでも大歓迎です。

4

2 に答える 2

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 に答える
0

[NSString stringWithUTF8String:val]は、リークしているオブジェクトを作成したステートメントです。次に何が起こるかを確認する必要があります。

どこかでNSString返されたものを保持していますか?readTextColumnWithIndex:

于 2012-07-02T14:10:27.077 に答える