5

我有一个连接到互联网然后刷新表格中的单元格的功能。

我的功能是:

- (void) updateMethod
{

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    queue.name = @"Data request queue";

    [queue addOperationWithBlock:^{

        //neither of these delay the responsiveness of the table
        [columnArrayBackground removeAllObjects];
        [self getColumnDataBackground];

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            for (int i=0; i < 6; i++) {
                columnArray[i] = columnArrayBackground[i];
            };

            //THIS ONE LINE CAUSES DELAYS
            [homeTable reloadData];


        }];
    }];
}

除了 [homeTable reloadData] 之外,一切都非常快速。当我对此发表评论时,我会迅速做出回应。当我取消注释时,我的细胞反应有时会滞后几秒钟!

我的其他 reloadData 调用不会延迟我的应用程序。我没有正确实现 NSOperationQueue 吗?

4

1 回答 1

6

从更新方法中删除队列,只保留更新表的内容。在刷新表的操作下添加此代码。其中 updateMethod 是更新表的代码。只有当您回到主线程时,您才会重新加载数据。希望这可以帮助!

//perform on new thread to avoid the UI from freezing
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),
               ^{
                   //background thread code
                   [self performSelector:@selector(updatemethod:) withObject:nil];
                   dispatch_async(dispatch_get_main_queue(),
                                  ^{    //back on main thread
                                      [self.tableView reloadData];
                                  });});
于 2013-08-29T19:55:47.357 回答