2012-10-29 81 views
4

我在我的應用程序中一直使用JSONKit,但現在我已升級到Xcode 4.5.1並運行分析,Xcode報告了JSONKit代碼中可能存在的內存泄漏。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

這是靜態分析儀中的誤報。有一個bug report試圖解決它。

+0

,是有辦法使分析忽略? – Aleksa

1

通過(dictionary == NULL)更換((array = [array init]) == NULL)和使用free(array)功能,而不是[array autorelease]修復它。 因爲它是手工收集的,所以它也可以手動發佈。

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); } 
+0

我不確定這是否是一個誤報,因爲我發生了這種內存泄漏。此修復程序不會泄漏 – absessive