我正在開發一個應用程序在可可中。我需要解析一個大尺寸的iTunes XML文件(大約25Mb)。我現在使用下面的代碼片段 NSDictionary * itunesDatabase = [NSDictionary dictionaryWithContentsOfFile:itunesPath ]。 但是這有點慢 有沒有更快的方法來加載整個數據到字典?在可可中的iTunes XML解析
回答
如果您能夠使用第三方框架,請運行,不要步行到EyeTunes。 (BSD許可證)。它是Apple Events與iTunes通信的抽象層,因此它不直接解析XML數據庫(我認爲,自從我使用它以來已經有一段時間了),但是您將擁有獲取/設置訪問XML中的任何內容。
如果使用的是蘋果事件,則iTunes必須運行才能使用它。 – 2011-02-13 17:42:11
你這樣慢的表現的原因是因爲NSDictionary
一次將所有內容全部讀入內存。對於一個大型的iTunes庫,這可能需要很長時間,並且可以隨時通過活動監視器來確認 - 這是一個度量內存分配。 (這是該內存量的精確技術術語)
在這些情況下的替代方法是使用基於回調的XML解析器(通常稱爲「SAX」解析器)。這些解析XML文檔的實體一次,並調用您的回調方法。在Cocoa中,NSXMLParser
類提供了這個功能。您將類設置爲其委託,調用parse
方法,解析器開始調用委託方法,因爲它讀取XML文件中的標記,屬性,文本等。
現在,這顯然比僅僅將所有內容加載到NSDictionary
並漫步生成的對象樹更困難。你需要自己跟蹤狀態信息。而且你必須逐步「建立」你的對象,所以組織你的課程可能很困難。
但是,您可以忽略您不感興趣的XML,並節省大量內存。而且,根據您從iTunes中獲得的數據,只要您獲得所需的數據,您也可以立即結束解析。即使這樣做最終會花費相當長的一段時間,但至少您可以向用戶顯示一個進度條或其他表示程序正在工作的指示,這比掛載10-20秒要好得多,而當加載NSDictionary
時一個巨大的XML文件。
請注意,由於'initWithData:'是其指定的初始化程序,因此NSXMLParser仍然一次全部讀入內存。 – 2009-08-13 06:42:42
嘗試使用的libxml:
http://www.cimgf.com/2008/08/18/cocoa-tutorial-libxml-and-xmlreader/
爲了減少最高的內存佔用,創建並在循環排出NSAutoreleasePool
該鏈接不再工作 – 2014-03-10 15:39:43
- 1. 解析iTunes資料庫XML可可
- 2. 可可:XML解析
- 3. C#解析XML的iTunes
- 4. 如何解析可可中的XML?
- 5. 可能的XML解析
- 6. 可恢復的XML解析
- 7. 可用的補充clojure-xml /解析的Clojure XML解析庫
- 8. 可可開源XML解析器
- 9. iOS解析XML iTunes:圖像標記
- 10. 如何可以解析XML Android中
- 11. 在C#中使用System.Xml解析iTunes Podcast XML
- 12. 解析iTunes top 100
- 13. 解析URL可可
- 14. 是否可以在Android中使用DOM解析器解析特定的XML?
- 15. 使用NSXML解析器解析可可
- 16. XML解析時,節點可能會或可能不存在
- 17. 從XML-RPC可可框架讀取已解析的響應
- 18. 可以使用jQuery的$(responseXML)語法可靠地解析XML嗎?
- 19. itunes連接分析可用性?
- 20. 在android中的XML解析
- 21. XML的解析在WinRT中
- 22. xml在android中的解析
- 23. 在QT中的XML解析
- 24. 在Oracle中的XML解析
- 25. xml在flex中的解析
- 26. 幫我在php中解析xml解析
- 27. 在Java/Android中可靠地解析RSS/XML feed
- 28. 是否可以在JAVA中結合使用XML解析器?
- 29. 解析NSXMLNode屬性可可
- 30. 失敗與SERDE-XML-RS的可選元素解析XML
你真的需要,使這個速度更快,或者是問題多的是,主線程在文件加載時被阻塞? – 2011-02-13 17:43:27