3

サーバーからJSON形式でデータを取得しています。それは約 150 レコードであり、最初は GCD を使用していませんでしたが、アプリのボタンを押してデータを含むテーブルを表示すると、テーブル ビューに切り替えてデータを表示する前に約数秒間遅延しました。 . だから私はGCDを実装し、ボタンを押すとすぐにテーブルビューに切り替わりますが、データのロードに数秒の遅延があり、GCD実装前よりも長いようです. したがって、GCDを正しく使用しているかどうか、またはサーバーが遅延を引き起こしているかどうかはわかりません(これが原因だと思います)。以下は、viewDidLoad で [self retrieveData] として呼び出す retrieveData というメソッドでの GCD の実装です。

- (void)retrieveData
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{

        NSURL *url = [NSURL URLWithString:@"http://MY_URL/JSON/document.json"];
        NSData * data = [NSData dataWithContentsOfURL:url];

        dispatch_async(dispatch_get_main_queue(), ^{

    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    //Set up our exhibitors array
    exhibitorsArray = [[NSMutableArray alloc] init];

    for (int i = 0; i < json.count; i++) {
        //create exhibitors object
        NSString * blabel = [[json objectAtIndex:i] objectForKey:@"BoothLabel"];
        NSString * bName = [[json objectAtIndex:i] objectForKey:@"Name"];
        NSString * bURL = [[json objectAtIndex:i] objectForKey:@"HyperLnkFldVal"];


        exhibitors * myExhibitors = [[exhibitors alloc] initWithBoothName: bName   andboothLabel: blabel andBoothURL: bURL];

        //Add our exhibitors object to our exhibitorsArray
        [exhibitorsArray addObject:myExhibitors];

        //Sort by name
        NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
        [exhibitorsArray sortUsingDescriptors:[NSMutableArray arrayWithObject:sort]];

    }

    [self.myTableView reloadData];

        });
    });

}
4

1 に答える 1