JSONKit 是不是会造成内存泄漏?
Posted
技术标签:
【中文标题】JSONKit 是不是会造成内存泄漏?【英文标题】: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 的分析不够好?
【问题讨论】:
【参考方案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]
来修复它。
因为它是手动分配的,所以它也应该手动释放。
【讨论】:
以上是关于JSONKit 是不是会造成内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章