Streaming NSXMLParser com NSInputStream

Atualizar:

Ao usarNSXMLParser método de classeinitWithContentsOfURLEm vez de analisar à medida que o feed XML é baixado, ele parece tentar carregar todo o arquivo XML na memória e só então iniciar o processo de análise. Isso é problemático se o feed XML for grande (usando uma quantidade excessiva de RAM, inerentemente ineficiente porque, em vez de analisar em paralelo com o download, ele só inicia a análise quando o download é feito etc.).

Alguém descobriu como analisar como o feed está sendo transmitido para o dispositivo usandoNSXMLParser? Sim, você pode usarLibXML2 (como discutido abaixo), mas parece que deve ser possível fazê-lo comNSXMLParser. Mas está me escapando.

Pergunta original:

Eu estava lutando com o usoNSXMLParser para ler XML de um fluxo da web. Se você usarinitWithContentsOfURL, enquanto a interface pode levar alguém a inferir que iria transmitir o XML da web, parece não fazê-lo, mas parece tentar carregar o arquivo XML inteiro antes de qualquer análise ocorrer. Para arquivos XML de tamanho modesto, tudo bem, mas para arquivos realmente grandes, isso é problemático.

Eu tenho visto discussões sobre o usoNSXMLParser em conjunção cominitWithStream com alguns personalizadosNSInputStream que está fluindo da web. Por exemplo, tem havido respostas para isso que sugerem usar algo como oCFStreamCreateBoundPair referido noseguinte postagem do Cocoa Builder e a discussão deConfigurando fluxos de soquete na maçãGuia de Programação de Fluxo, mas não consegui que funcionasse. Eu até tentei escrever meu próprio subclasseNSInputStream que usou umNSURLConnection (que é, em si, muito bom em streaming), mas eu não era capaz de fazê-lo funcionar em conjunto comNSXMLParser.

No final, decidi usarLibXML2 ao invés deNSXMLParser, como demonstrado na AppleAmostra XMLPerformance, mas eu queria saber se alguém teve alguma sorte recebendo streaming de uma fonte da web que trabalha comNSXMLParser. Eu já vi muita "teoricamente você poderia fazerx"tipo de respostas, sugerindo tudo, desdeCFStreamCreateBoundPair para pegar oHTTPBodyStream deNSURLRequest, mas eu ainda não encontrei uma demonstração de streaming comNSXMLParser.

O artigo de Ray WenderlichComo escolher o melhor analisador XML para o seu projeto do iPhone parece confirmar queNSXMLParser não é adequado para grandes arquivos XML, mas com todos os posts sobre possíveisNSXMLParsercom base em soluções para streaming de arquivos XML realmente grandes, estou surpreso por ainda não ter encontrado uma demonstração funcional disso. Alguém sabe de um funcionamentoNSXMLParser implementação que flui da web? Claramente, eu posso ficar comLibXML2 ou algum outro analisador XML equivalente, mas a noção de streaming comNSXMLParser parece tantilizingly perto.

questionAnswers(1)

yourAnswerToTheQuestion