Цель C - блоки завершения и контроллеры представления извлекаются из стека - PullRequest
1 голос
/ 26 марта 2012

Я написал асинхронный вызов, который имеет блок завершения для возврата UIImage, затем в блоке завершения контроллер представления устанавливает UIImageView для использования этого изображения. Мой вопрос: что произойдет, если этот контроллер представления извлечен из стека UINavigationController и больше не будет работать до выполнения блока завершения?

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

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Поскольку блок, переданный вашему API, захватывает (сохраняет) self, self будет активен.Поэтому, если вы используете retain / release должным образом или используете ARC, это безвредно.

0 голосов
/ 26 марта 2012

Скорее всего EXC_BAD_ACCESS. Ваш API, вероятно, должен иметь другой метод для отмены асинхронной задачи, которую вы можете вызвать, когда контроллер представления освобожден.

...