【问题标题】:Memory leaks in ipod - 100% leak while using instruments and iPodipod 内存泄漏 - 使用仪器和 iPod 时 100% 泄漏
【发布时间】:2012-07-02 12:56:07
【问题描述】:
 -(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 等可能会导致内存泄漏。非常感谢任何帮助。

【问题讨论】:

  • 但你没有,是吗。

标签: xcode memory-leaks


【解决方案1】:

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

您是否将readTextColumnWithIndex: 返回的NSString 保留在某处?

【讨论】:

    【解决方案2】:
    -(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-06
      • 2011-11-02
      • 1970-01-01
      • 2011-02-15
      • 2010-11-26
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多