Вопрос

У меня есть следующий код - методы для чтения 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.

Заранее спасибо, что поделились со мной своими знаниями

Это было полезно?

Решение

Вот пример из Apple, который называется Производительность XMLPerformance это иллюстрирует libxml противNSXMLParser с точки зрения производительности.Ознакомьтесь с его реализацией в libxml.

Другие советы

Примеры кода SiesmicXML и TopSongs из ацп покажите несколько способов синтаксического анализа XML, которые требуют минимального времени ожидания пользователя.

Вы смотрели на libxml Библиотека C, или Сенсорный XML обертка для него?Кроме того, вы уверены, что именно NSXMLParser вызывает ваше замедление?Возможно, вы захотите выполнить краткое руководство с помощью Instruments или Shark, чтобы профилировать приложение и найти точки доступа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top