2012-04-15 3 views
0

내 앱의 응답 속도를 높이고 디버거 콘솔을 체크 아웃하는 동안 앱에서 XML 데이터를 두 번 검색하는 것으로 나타났습니다. . . 즉, 페이지가 나타나면 일부 xml 데이터를 가져와 파싱하고 객체 배열을 반환하는 백그라운드 큐를 전달합니다. 나는 nslog를 사용하여 콘솔에 데이터 문자열을 입력하고 몇 가지 이유로 두 번 인쇄합니다. Heres는 내 관련 코드 : VC에서iOS 백그라운드 대기열에서 데이터를 두 번 검색하고 있습니까?

:

SDJConnection에서 getVideoData 방법은 다음과 같습니다
-(void)startBackgroundQueue{ 
dispatch_async(backgroundThread, ^(void){ 
    SDJConnection *connection = [[SDJConnection alloc]init]; 
    self.dataArray = [connection getVideoData]; 

    [[NSNotificationCenter defaultCenter]postNotificationName:@"tube_data_loaded" object:nil]; 
    }); 
} 

:

-(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];}     
}); 
} 

Im이 문제인지 아닌지 확실하지 않지만 어떻게 든 실행하는 것으로 자원을 낭비하고 있다고 걱정됩니다. 이 두 번. 무슨 일이 벌어 질지에 대한 아이디어가 있습니까?

감사합니다.

답변

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

: 당신은 같은 중첩 된 블록을 사용할 수 있습니다