我正在尝试提高应用程序的响应能力,在检查调试器控制台时,我注意到应用程序似乎在两次检索XML数据。 。 。也就是说,当页面出现时,我调度一个后台队列来获取一些xml数据,解析它并返回一个对象数组。我使用nslog在控制台中键入数据字符串,由于某种原因,它将打印出来两次。继承了我的相关代码:
在VC中:
-(void)startBackgroundQueue{
dispatch_async(backgroundThread, ^(void){
SDJConnection *connection = [[SDJConnection alloc]init];
self.dataArray = [connection getVideoData];
[[NSNotificationCenter defaultCenter]postNotificationName:@"tube_data_loaded" object:nil];
});
}
SDJConnection中的getVideoData方法如下所示:
-(NSMutableArray *)getVideoData {
NSURL *dataURL = [[NSURL alloc]initWithString:@"https://gdata.youtube.com/feeds/api/users/dancingastronaut/uploads?start-index=1&max-results=10"];
NSData *data = [[NSData alloc]initWithContentsOfURL:dataURL];
NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"data string: %@",dataString);
YouTubeParser *parser = [[YouTubeParser alloc]initWithData:data];
[parser setDelegate:parser];
[parser parse];
return [parser videosArray];
}
然后VC执行此代码:
-(void)backgroundQueueDone{
dispatch_async(dispatch_get_main_queue(),^(void){
[activityIndicator stopAnimating];
if ([_dataArray count] >1) {
self.tableView.separatorColor = [UIColor darkGrayColor];
[self.tableView reloadData];}
});
}
我不确定这是否是一个问题,但我担心我会以某种方式通过两次运行来浪费资源。关于可能发生的事情的任何想法?
谢谢!
答案 0 :(得分:1)
您可能两次调用方法“startBackgroundQueue”?根据我的拙见,该块将被执行一次。
为什么使用通知来获取块的结果?您可以使用嵌套块,如:
dispatch_async(backgroundThread, ^(void){
SDJConnection *connection = [[SDJConnection alloc]init];
self.dataArray = [connection getVideoData];
dispatch_async(dispatch_get_main_queue(),^(void){
[activityIndicator stopAnimating];
if ([self.dataArray count] >1) {
self.tableView.separatorColor = [UIColor darkGrayColor];
[self.tableView reloadData];}
});
});
这可以为您节省完整的通知;)