Streaming NSXMLParser con NSInputStream

Actualizar:

Cuando usasNSXMLParser método de claseinitWithContentsOfURLEn lugar de analizar a medida que se descarga la fuente XML, parece que intenta cargar todo el archivo XML en la memoria, y solo entonces inicia el proceso de análisis. Esto es problemático si la fuente XML es grande (usando una cantidad excesiva de RAM, inherentemente ineficiente porque en lugar de analizar en paralelo con la descarga, solo comienza el análisis una vez que se realiza la descarga, etc.).

¿Alguien ha descubierto cómo analizar a medida que la transmisión se transmite al dispositivo usandoNSXMLParser? Si puedes usarLibXML2 (como se explica a continuación), pero parece que debería ser posible hacerlo conNSXMLParser. Pero me está eludiendo.

Pregunta original:

Estaba luchando con el usoNSXMLParser para leer XML de un flujo web. Si utilizainitWithContentsOfURLSi bien la interfaz puede hacer que uno deduzca que transmitiría el XML desde la web, no parece que lo haga, sino que parece intentar cargar todo el archivo XML antes de que se realice el análisis. Para archivos XML de tamaño modesto está bien, pero para archivos realmente grandes, eso es problemático.

He visto discusiones sobre el uso deNSXMLParser en conjunción coninitWithStream con algunos personalizadosNSInputStream que se está transmitiendo desde la web. Por ejemplo, ha habido respuestas a esto que sugieren usar algo como elCFStreamCreateBoundPair referido en elsiguiente publicación de Cocoa Builder y la discusión deConfiguración de flujos de socket en la manzanaGuía de programación de la corriente, pero no he conseguido que funcione. Incluso traté de escribir mi propio subclasificadoNSInputStream que usaba unNSURLConnection (que es, en sí, bastante bueno en la transmisión) pero no pude hacerlo funcionar junto conNSXMLParser.

Al final, decidí usarLibXML2 más bien queNSXMLParser, como se demuestra en el AppleMuestra de rendimiento XML, pero me preguntaba si alguien tuvo suerte al hacer streaming desde una fuente web que trabaja conNSXMLParser. He visto un montón de "teóricamente que podrías hacerx"tipo de respuestas, sugiriendo todo desdeCFStreamCreateBoundPair a agarrar elHTTPBodyStream desdeNSURLRequest, pero todavía tengo que encontrar una demostración de trabajo con streamingNSXMLParser.

El artículo de Ray Wenderlich.Cómo elegir el mejor analizador XML para tu proyecto de iPhone parece confirmar queNSXMLParser no es adecuado para archivos XML grandes, pero con todas las publicaciones sobre posiblesNSXMLParserPara evitar la transmisión de archivos XML realmente grandes, me sorprende que todavía tenga que encontrar una demostración funcional de esto. ¿Alguien sabe de un funcionamiento?NSXMLParser ¿Implementación que se transmite desde la web? Claramente, puedo seguir conLibXML2 o algún otro analizador XML equivalente, pero la noción de transmisión conNSXMLParser Parece tentadoramente cerca.

Respuestas a la pregunta(1)

Su respuesta a la pregunta