Frage

Ich habe folgende Code - Methoden XML-Dateien zu lesen. Aber es funktioniert für mich sehr langsam. Gibt es keine ausreichende Möglichkeit zu holen und Daten schneller zu lesen.

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

}

Lassen Sie mich noch einmal meine Frage klären.

Ich habe beobachtet, dass auf diese Weise xml des Lesens nicht ausreichend ist. Durch die Nutzung dieser Art und Weise Daten iPhone lädt sehr langsam. Weil, iphone, um jeden Tag jedes Mal, liest und vergleichen.

Ich möchte etwas schneller XML Laden & Parsing.

Vielen Dank im Voraus für Ihr Wissen mit mir teilen

War es hilfreich?

Lösung

Es ist ein Beispiel von Apple namens XMLPerformance , das zeigt, Libxml vs. NSXMLParser in Bezug auf Leistung. Schauen Sie sich die Implementierung von libxml.

Andere Tipps

Die SiesmicXML und TopSongs Codebeispiele von adc zeigen einige Möglichkeiten, Parsen von XML, die ein Minimum an Benutzerwartezeit führen.

Haben Sie an der sah Libxml C Bibliothek oder die TouchXML Wrapper für sie? Auch Sie sind sicher, dass es der NSXMLParser ist, dass Ihre Verlangsamung verursacht? Sie können einen schnellen Durchlauf mit Instrumenten oder Shark tun mögen, um die Anwendung zu profilieren und die Hotspots finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top