Question

J'ai le code suivant - des méthodes pour lire les fichiers XML. Mais cela fonctionne très lentement pour moi. N'y a-t-il pas un moyen suffisant pour aller chercher & amp; lire les données plus rapidement.

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;
}

}

Permettez-moi de clarifier ma question à nouveau.

J’ai observé que cette façon de lire xml n’était pas suffisante. En utilisant cette méthode, iPhone charge les données très lentement. Parce que, iphone va lire & amp; compare chaque balise à chaque fois.

Je veux un chargement XML plus rapide & amp; Analyse.

Merci d'avance de partager vos connaissances avec moi

Était-ce utile?

La solution

Il existe un exemple fourni par Apple intitulé XMLPerformance qui illustre libxml vs. NSXMLParser en termes de performances. Découvrez son implémentation de libxml.

Autres conseils

Les exemples de code SiesmicXML et TopSongs extraits de adc montrent certains moyens d’analyser XML entraînant un minimum de temps d’attente pour les utilisateurs.

Avez-vous consulté le libxml ? bibliothèque ou l’enveloppe TouchXML ? Aussi, êtes-vous sûr que c'est le NSXMLParser qui provoque votre ralentissement? Vous voudrez peut-être effectuer une analyse rapide en utilisant Instruments ou Shark pour profiler l'application et trouver les points chauds.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top