0

アプリの応答性を向上させようとしていますが、デバッガー コンソールを確認しているときに、アプリが XML データを 2 回取得しているように見えることに気付きました。. . つまり、ページが表示されると、バックグラウンド キューをディスパッチして xml データを取得し、解析して、オブジェクトの配列を返します。nslog を使用してコンソールにデータ文字列を入力すると、何らかの理由で 2 回出力されます。関連するコードは次のとおりです。

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

これが問題かどうかはわかりませんが、どういうわけかこれを 2 回実行してリソースを浪費しているのではないかと心配しています。何が起こっているのかについてのアイデアはありますか?

ありがとう!

4

1 に答える 1

1

メソッド「startBackgroundQueue」を 2 回呼び出した可能性はありますか? 私の謙虚な意見では、ブロックは 1 回実行されます。

また、ブロックの結果を取得するために通知を使用するのはなぜですか? 次のようなネストされたブロックを使用できます。

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

これにより、完全な通知が保存されます;)

于 2012-04-19T10:40:03.680 に答える