2013-07-10 211 views
-1

我有一個函數,我使用NSJSONSerialization。我想做一個很好的釋放/內存管理,因爲它可以是200多個對象。- [CFDictionary發佈]:發送到釋放實例的消息0x26a13ca0

for (NSDictionary *dict in visitsAndQuestionnaires) { 
    NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:filePath];    
    [is open]; 
    if (is) { 
     JSON = [NSJSONSerialization JSONObjectWithStream:is options:0 error:nil]; 
     if (![JSON respondsToSelector:@selector(objectForKey:)]) { 
      JSON = nil; 
     } 
     [is close]; 
    } 
    [is release]; 

    if (JSON) { 
     // HERE MY FUNCTION TO CREATE A LAYOUT BASED ON JSON 
    } 
    // WHEN FUNCTION WITH JSON IS DONE: 
    if (JSON) { 
     //JSON = NIL; 
     [(id)JSON release]; 
    } 
} 

比功能做它功能219個對象只能在對象219的應用程序崩潰與此控制檯日誌:

-[CFDictionary release]: message sent to deallocated instance 0x26a13ca0 

即使我只是在釋放JSON時,它仍然存在,這工作(我可以在profiler中看到它),只有當它試圖釋放最後一個對象時它看起來已經消失了。

我該如何解決這個問題?這樣這個發佈函數起作用了嗎?

+0

評論// [是發佈];然後運行它。 –

+0

也不行.. – user983511

+0

也對[(id)JSON發佈]發表評論; –

回答

2

NSJSONSerialization類返回一個自動釋放對象。只是不要釋放它。

+0

我認爲其中一個問題是*,然後使用'if(JSON)'。 –

+0

我在探查器中尋找,當我做一個[JSON發佈]它節省了我65%的內存.. – user983511

+0

@ user983511事情真的搞砸了。這是你顯示的代碼中的**問題。 – 2013-07-10 11:23:43

0

在函數循環中創建Autoreleasepool是解決方案。我感謝你們!今天學到了東西..

相關問題