4

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

4

3 回答 3

4

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

于 2012-10-29T16:18:16.137 回答
2

请参阅此链接。只需将标记为 - 的行替换为标记为 + 的行。

-    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); }
于 2013-05-24T09:42:24.650 回答
1

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

于 2013-05-02T07:52:24.907 回答