JSONKit是否会造成内存泄漏?

时间:2012-10-29 16:12:30

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

我一直在我的应用中使用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的分析还不够好?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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); }

答案 2 :(得分:1)

((array = [array init]) == NULL)替换为(dictionary == NULL)并使用free(array)函数代替[array autorelease]进行修复。 因为它是手动调整的,所以它也应该手动释放。