iOS 6中,我如何在后台线程加载数据并更新UI?

3

有很多方法可以做到这一点,但对于IOS 6应用程序来说,什么是当前的、现代的、正确的方式呢?

以下是我目前正在做的事情:

- (void)viewDidLoad
{
    [super viewDidLoad];

    __weak MyViewController *weakSelf = self;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
                                         (unsigned long)NULL), ^(void) {
        // Do work that will take a long time
        // Store data in member variables, etc.

        // Update the UI 
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf.myTableView reloadData];
        });
    }
}

使用ARC时,我认为__weak引用不是必要的,但我不能百分之百确定。

1个回答

3

你现在所做的完全是正确的!当您使用块时,需要弱引用,并且完全遵循ARC。在ARC之前,“weak”还不存在。


1
在这种情况下不需要使用 weak。只有在 self 和 block 之间存在保留循环的风险时,才需要创建 "weak self"。但是在这段代码中不存在这个问题。 - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接