0

所以在我的 tableViewController 中我把这段代码放进去。我的想法是使用另一个名为 downloader 的线程来下载一些不会影响我的主线程的数据。

- (void)viewDidLoad
{
    [super viewDidLoad];
    dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL);
    dispatch_async(downloadQueue, ^{
        self.bandList = [self.fetchData fetchBandList];
        NSLog(@"done");
        [self.tableView reloadData];
        NSLog(@"reloadDone?");
    });
    dispatch_release(downloadQueue);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"WT..?");
    static NSString *CellIdentifier = @"Band List";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    cell.textLabel.text = [[self.bandList objectAtIndex:indexPath.row] objectForKey:@"itemname"];

    return cell;
}

但是,有一些有线延迟。在我的日志中,“完成”和“重新加载完成?” 当我转到我的 tableViewController 时立即出现,但是“WT..?” 6 秒后出现!太连线了!任何人都可以帮我解决这个问题吗?

4

1 回答 1

1

对 UI 的任何更新都应该在主队列上完成

dispatch_async(downloadQueue, ^{
        self.bandList = [self.fetchData fetchBandList];
        NSLog(@"done");
        dispatch_async(dispatch_get_main_queue(),^{[self.tableView reloadData];});
        NSLog(@"reloadDone?");
    });
于 2012-07-13T19:19:47.230 回答