我一直在我的应用中使用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的分析还不够好?
答案 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]
进行修复。
因为它是手动调整的,所以它也应该手动释放。