ios: 如果视图消失,如何正确处理请求回调

ios: how to correctly handle request callback if view disappeared

在我的视图控制器中,我通常从服务器加载一些数据并调用一些函数来呈现数据或在请求数据从服务器返回时执行一些操作。以下是此类代码的片段。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    __weak typeof(self) weakSelf = self;
    [MyRequestManager loadObjects: ^(MyObject* object, NSError* error) {
        weakSelf.textField.text = object.text;
        //do some other actions
    }];
}

如果数据来自服务器视图之前是disappeared/unloaded,是否会调用回调?如果调用它,则可能会发生意想不到的事情。那么我们如何才能防止这种情况发生呢?

我能想到一种在 viewWillAppearviewWillDisappear 中设置变量的方法。推荐的做法是什么?

由于您将 weakself 保留在内部,self 将不会保留,因此将被释放。你应该让你的弱者在里面成为一个强大的价值,使用强大的它不会崩溃。

__weak typeof(self) weakSelf = self;
dispatch_group_async(_operationsGroup, _operationsQueue, ^{
    typeof(self) strongSelf = weakSelf;
    if (strongSelf) {
        [strongSelf doSomething];
        [strongSelf doSomethingElse];
    }
});

您可以在此处找到更多深度信息,例如:http://albertodebortoli.github.io/blog/2013/08/03/objective-c-blocks-caveat/