Objective C - 从堆栈中弹出完成块和视图控制器

时间:2012-03-26 16:34:36

标签: objective-c objective-c-blocks

我编写了一个异步调用,它有一个完成块来返回一个UIImage,然后在完成块中,视图控制器设置一个UIImageView来使用该图像。我的问题是,如果该视图控制器从UINavigationController堆栈中弹出并且在完成块执行之前不再存在,会发生什么?

[MyAPI getImage:imageID completionBlock:^(MyAPIStatus status, id result) {
        if (status == kSuccessful) {
            self.ImageView.image = [UIImage imageWithData:result];
        }
    }];

2 个答案:

答案 0 :(得分:4)

由于传递给您的API的块会捕获(保留)self,因此self将处于活动状态。 因此,如果您正确使用保留/释放或使用ARC,则无害。

答案 1 :(得分:0)

最有可能EXC_BAD_ACCESS。您的API应该有另一种方法可以取消在取消分配视图控制器时可以调用的异步任务。