Pregunta

Tengo el siguiente código: métodos para leer archivos xml. Pero funciona muy lento para mí. ¿No hay alguna manera suficiente de buscar & amp; lee los datos más rápido.

if(connectionRemaining)
{
    [self LoadingPopUp];
    NSURL *tmpURl=[NSURL URLWithString:[NSString stringWithFormat:@"%@getcategory.php",[iGolfAppDelegate getServerPath]]];
    NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:tmpURl];
    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if(conn)
        myWebData=[[NSMutableData data] retain];
    connectionRemaining=NO;
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[myWebData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[myWebData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
//  NSString *theXML = [[NSString alloc] initWithBytes: [myWebData mutableBytes] length:[myWebData length] encoding:NSUTF8StringEncoding];
//  NSLog(@"%@",theXML);[theXML release];   
if( myXMLParser )
    [myXMLParser release];
myXMLParser = [[NSXMLParser alloc] initWithData: myWebData];
[myXMLParser setDelegate: self]; [myXMLParser setShouldResolveExternalEntities: YES];
[myXMLParser parse];[connection release];[myWebData release];
}

#pragma mark
#pragma mark XMLParsing Methods
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict {
if([elementName isEqualToString:@"category"])
    categoryArray=[[NSMutableArray alloc]init];
else if([elementName isEqualToString:@"Prop_Category"])
    aCategory=[[Category alloc] init];
}

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string {
if(!currentElementValue)
    currentElementValue=[[NSMutableString alloc] initWithString:string];
else
    [currentElementValue appendString:string];
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName {
if([elementName isEqualToString:@"category"])
{ [LoadingAlert dismissWithClickedButtonIndex:0 animated:YES]; [LoadingAlert release];[self categoryPickerDiplay]; return;  }
else if([elementName isEqualToString:@"Prop_Category"])
{ [categoryArray addObject:aCategory];[aCategory release];aCategory=nil; }
else{   
    [aCategory setValue:currentElementValue forKey:elementName];
    [currentElementValue release];currentElementValue=nil;
}

}

Permítame aclarar mi pregunta otra vez.

He observado que esta forma de leer xml no es suficiente. Al usar de esta manera el iPhone carga los datos muy lentamente. Porque, iPhone leerá & amp; compara cada etiqueta cada vez.

Quiero una carga XML más rápida & amp; Análisis.

Gracias de antemano por compartir tus conocimientos conmigo

¿Fue útil?

Solución

Hay un ejemplo de Apple llamado XMLPerformance que ilustra libxml vs. NSXMLParser en términos de rendimiento. Echa un vistazo a su implementación de libxml.

Otros consejos

Los ejemplos de código SiesmicXML y TopSongs de adc muestran algunas formas de análisis de XML que causa un mínimo de tiempo de espera del usuario.

¿Has mirado el libxml C ¿Biblioteca, o el contenedor TouchXML para ello? Además, ¿está seguro de que es el NSXMLParser lo que está causando su desaceleración? Es posible que desee hacer un recorrido rápido utilizando Instruments o Shark para crear un perfil de la aplicación y encontrar los puntos de acceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top