【问题标题】:Is JSONKit creating memory leaks?JSONKit 是否会造成内存泄漏?
【发布时间】:2012-10-29 16:12:29
【问题描述】:

我一直在我的应用程序中使用JSONKit,但现在我已升级到 Xcode 4.5.1 并运行分析,Xcode 报告 JSONKit 代码中可能存在内存泄漏。

/Users/aleksa.topic/SVN/Apple/iTTChart/trunk/iTTChart/Other Sources/JSONKit.m:682:23: Memory is never released; potential leak of memory pointed to by 'array' (并且它为字典提供了相同的潜在泄漏)。

有人有这方面的经验吗?是真的造成内存泄漏还是只是 Xcode 的分析不够好?

【问题讨论】:

    标签: objective-c memory-leaks xcode4.5 jsonkit


    【解决方案1】:

    这是静态分析器中的误报。有一个bug report 试图解决它。

    【讨论】:

    • 有没有办法让分析器忽略它?
    【解决方案2】:

    看到这个link。只需将标记为 - 的行替换为标记为 + 的行。

    -    if((array = [array init]) == NULL) { return(NULL); }
    +    if([array init] == NULL) { free(array); return(NULL); }
    

    -    if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { [array autorelease]; return(NULL); }
    +    if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { free(array); return(NULL); }
    

    -    if((dictionary = [dictionary init]) == NULL) { return(NULL); }
    +    if([dictionary init] == NULL) { free(dictionary);return(NULL); }
    

    -    if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { [dictionary autorelease]; return(NULL); }
    +    if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { free(dictionary); return(NULL); }
    

    【讨论】:

    • 我不确定这是误报,因为我已经发生了这种内存泄漏。此修复不会泄漏
    【解决方案3】:

    ((array = [array init]) == NULL) 替换为(dictionary == NULL) 并使用free(array) 函数而不是[array autorelease] 来修复它。 因为它是手动分配的,所以它也应该手动释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2016-05-31
      • 2014-05-13
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多