Я разрабатываю приложение в какао. Мне нужно разобрать XML-файл большого размера (около 25 МБ) iTunes. Теперь я использую следующий фрагмент кода: NSDictionary * itunesDatabase = [Словарь NSDictionaryWithContentsOfFile: itunesPath ]; Но это немного медленнее Есть ли какой-нибудь более быстрый способ загрузить все данные в словарь?iTunes XML Анализ в какао
ответ
Если вы используете сторонние фреймворки, запустите, не ходите до EyeTunes. (Лицензия BSD). Это слой абстракции вокруг Apple Events для связи с iTunes, и поэтому он не анализирует базу данных XML напрямую (я думаю, что прошло некоторое время с тех пор, как я ее использовал), но вы будете иметь получить/установить доступ к чему-либо в XML.
Если Apple использует события Apple, очевидным недостатком является то, что iTunes должен работать, чтобы использовать его. –
Причина, по которой у вас такая низкая производительность, заключается в том, что NSDictionary
считывает все в память сразу. Для большой библиотеки iTunes это может занять много времени и - не стесняйтесь подтверждать это с помощью Activity Monitor - метрической памяти. (Это точный технический термин для этого объема памяти)
Альтернативой в этих ситуациях является использование XML-анализатора на основе обратного вызова (обычно называемого синтаксическими анализаторами SAX). Эти синтаксические XML-документы обрабатывают объект одновременно и вызывают методы обратного вызова. В Cocoa класс NSXMLParser
обеспечивает эту функциональность. Вы назначаете свой класс в качестве его делегата, вызываете метод parse
, и синтаксический анализатор запускает вызовы методов делегата, когда он читает теги, атрибуты, текст и т. Д. В файле XML.
Теперь это, очевидно, сложнее, чем просто загрузить все в NSDictionary
и пройти по дереву объектов. Вам нужно будет самостоятельно отслеживать информацию о состоянии. И вам придется «наращивать» свои объекты постепенно, поэтому организовать ваши классы может быть сложно.
Однако вы можете игнорировать XML, который вам неинтересен, и это экономит много памяти. И, в зависимости от того, какие данные вы получаете из iTunes, вы также сможете закончить разбор, как только получите нужные вам данные. Даже если это закончится довольно долго, по крайней мере, вы сможете показать вашему пользователю индикатор выполнения или другое указание на то, что ваша программа работает, что намного лучше, чем просто висит на 10-20 секунд, пока NSDictionary
загрузок гигантский файл XML.
Обратите внимание, что NSXMLParser все время считывает все в память сразу, поскольку 'initWithData:' является его назначенным инициализатором. –
Попробуйте использовать LibXML:
http://www.cimgf.com/2008/08/18/cocoa-tutorial-libxml-and-xmlreader/
Чтобы минимизировать высокий объем памяти, создавать и слейте NSAutoreleasePool в цикле
эта ссылка больше не работает –
- 1. XML-анализ в какао Touch/iPhone
- 2. Управление iTunes из приложения какао
- 3. Анализ и написание XML в MAC 10.3.9 Какао?
- 4. iTunes Название песни Прокрутка в какао
- 5. Какао-трек меню/варианты ввода в itunes
- 6. Какао: ЖК-дисплеи iTunes и XCode 4
- 7. Анализ и анализ XML
- 8. Анализ текста свободного формата в какао
- 9. Анализ XML-строки в XML
- 10. XML-RPC-сервер в какао
- 11. Импорт XML в какао вопросы
- 12. Анализ XML в PHP
- 13. Анализ XML в C
- 14. Анализ XML в Python
- 15. XML-анализ в GWT
- 16. Анализ XML в Oracle
- 17. Анализ xml в словаре
- 18. XML-анализ в Javascript
- 19. Анализ XML в Node.js
- 20. Анализ XML в PLSQL
- 21. Анализ XML в R
- 22. Анализ XML в Elm
- 23. Анализ XML в D
- 24. Анализ XML в VBA
- 25. Анализ XML в списке
- 26. Анализ XML в xcode
- 27. Анализ XML в массиве
- 28. Анализ XML в JSON
- 29. Анализ XML в Cocoa
- 30. Анализ XML в JSFL?
ли вам действительно нужно, чтобы сделать это быстрее, или это проблема более, что основной поток блокируется во время загрузки файла? –