Я загружаю данные в UITableView через XML-канал с сайта Wordpress.Я хотел отобразить таблицу с изображением, если публикация содержала его, и изображение по умолчанию, если его нет.Итак, в моем методе
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
у меня есть оператор if, который выглядит следующим образом:
if ([elementname isEqualToString:@"content:encoded"]) {
NSString *firstImageURL = [self getFirstImageUrl:currentStory.content];
currentStory.imageURL = firstImageURL;
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString: firstImageURL]]];
currentStory.image = image;
}
Это вызывает getFirstImageURL, который выглядит следующим образом:
-(NSString *)getFirstImageUrl: (NSString *) html {
NSScanner *theScanner;
NSString *imageURL = nil;
theScanner = [NSScanner scannerWithString: html];
// find start of tag
[theScanner scanUpToString: @"<img" intoString: NULL];
if ([theScanner isAtEnd] == NO) {
[theScanner scanUpToString: @"src=\"" intoString: NULL];
NSInteger newLoc2 = [theScanner scanLocation] + 5;
[theScanner setScanLocation: newLoc2];
// find end of tag
[theScanner scanUpToString: @"\"" intoString: &imageURL];
}
return imageURL;
}
Все работает как надо, но загрузка таблицы занимает от 5 до 6 секунд и иногда может занимать до 10 секунд, что нежелательно.Мне было интересно, могу ли я что-нибудь сделать, чтобы ускорить процесс захвата первой фотографии.
ОБНОВЛЕНИЕ
Итак, после дополнительных исследований выясняется, что узкое местоЯ вижу, что не имеет никакого отношения к загрузке изображений.На самом деле загрузка изображений занимает не более 2 секунд.Похоже, что узкое место возникает, когда я загружаю RSS-канал:
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
Это занимает больше всего времени.
2012-03-30 14:35:11.506 gbllc[883:3203] inside grabDataForFeed
2012-03-30 14:35:11.510 gbllc[883:3203] reached loadXMLByURL
2012-03-30 14:35:11.512 gbllc[883:3203] after stories alloc
**** 5 seconds ****
2012-03-30 14:35:16.568 gbllc[883:3203] after initWithContentsOfURL
2012-03-30 14:35:16.570 gbllc[883:3203] after initWithData
2012-03-30 14:35:16.573 gbllc[883:3203] about to parse
*** I now parse the XML and download images, takes 2 seconds ***
2012-03-30 14:35:18.066 gbllc[883:3203] Parsed successfully
Сразу после размещения объекта данных я получаю данные для анализа.Поэтому я думаю, что мой исходный вопрос больше не действителен, и мне, вероятно, следует спросить, есть ли более быстрый способ получения исходных данных для анализа или мне следует изменить свою модель и попытаться использовать json или что-то еще?