我需要快速簡單地解析我的應用程序中的XML文件。對我來說最好的解決方案似乎是沿着XML到NSDictionary轉換器的方向,然後我可以更輕鬆地挖掘它們。我應該使用[autorelease]嗎?
我選擇使用這個小類:http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/
但是我感到困惑返回NSDictionary*
和它在內存中的狀態。類方法dictionaryForXMLData
分配並處理類。 objectWithData
然後關閉,並執行重新返回返回給調用者的對象NSDictionary
。
我感到困惑的部分是[reader release]
之前返回(我明白這是因爲reader
創建的方式必須發生)。我對NSDictionary
的理解是,所有對象也將發送release
消息,這意味着我們要返回的對象不應該有保留計數。請注意,該對象是使用便捷方法創建的,並且只有在將其添加到堆棧時纔會獲得保留計數。
如果return語句不是return [rootDictionary autorelease]
。我看到的問題是,當rootDictionary
將被髮布並且根據XML文件的大小它可能會在那裏阻塞內存時不知道嗎?還是我有這一切錯了?
好的,所以我的理解是正確的。是的,我的'return [rootDictionary autorelease]'錯誤應該在'retain'之後,在'release'之前。 – Calvin 2012-07-29 07:18:45
我已經解決了我關心的可能較大的'NSDictionary'留在內存中,直到autorelease池釋放它通過使用'@ autorelease'塊範圍的XML到'NSDictionary'轉換。這應該防止任何東西四處亂停並堵塞內存超過必要的時間。 – Calvin 2012-07-31 08:47:20
@Calvin:當然,你可以添加一個autorelease塊。但是,你應該確保任何你想「帶出」autorelease塊(在這種情況下是'rootDictionary')。因此,您應該在該行保留'retain',但將autorelease移動到您返回的最後一行,而不是自動釋放塊 – newacct 2012-07-31 19:09:02