2009-09-11 62 views
3

我有以下代碼 - 讀取xml文件的方法。 但它對我來說工作非常緩慢。 沒有足夠的方法可以更快地讀取&讀取數據。iPhone中需要更快的xml讀取

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

}

讓我再次澄清我的問題。

我發現這種閱讀xml的方式是不夠的。 通過使用這種方式iPhone非常緩慢地加載數據。因爲,iphone會每次讀&比較每個標籤。

我想要一些更快的XML加載&解析。

預先感謝來自adc與我分享你的知識

回答

3

有一個來自Apple的例子XMLPerformance,它在性能方面說明了libxml與NSXMLParser。查看它的libxml的實現。

2

的SiesmicXML和TopSongs代碼樣本顯示,導致最少的用戶等待時間解析XML的一些方法。

+0

@ennuikiller - 先生,這裏的代碼示例是可用的? – 2009-09-11 18:04:15

+1

http://developer.apple.com/iphone/library/samplecode/SeismicXML/index.html – ennuikiller 2009-09-12 13:38:50

2

你看過libxml C庫,還是TouchXML包裝呢?另外,你確定它是導致你的放緩的NSXMLParser嗎?您可能需要使用Instruments或Shark快速檢測應用程序並找到熱點。