У меня есть рабочее приложение, и я работаю над его преобразованием в ARC в Xcode 4.2. Одно из предупреждений предварительной проверки включает в себя фиксацию self
сильно в блоке, ведущем к циклу удержания. Я сделал простой пример кода, чтобы проиллюстрировать проблему. Я считаю, что понимаю, что это значит, но я не уверен, что "правильный" или рекомендуемый способ реализовать этот тип сценария.
- self - это экземпляр класса MyAPI
- приведенный ниже код упрощен, чтобы показать только взаимодействия с объектами и блоками, относящимися к моему вопросу.
- Предположим, что MyAPI получает данные из удаленного источника, и MyDataProcessor работает с этими данными и производит вывод
- процессор сконфигурирован с блоками для передачи прогресса и состояния
пример кода:
// code sample
self.delegate = aDelegate;
self.dataProcessor = [[MyDataProcessor alloc] init];
self.dataProcessor.progress = ^(CGFloat percentComplete) {
[self.delegate myAPI:self isProcessingWithProgress:percentComplete];
};
self.dataProcessor.completion = ^{
[self.delegate myAPIDidFinish:self];
self.dataProcessor = nil;
};
// start the processor - processing happens asynchronously and the processor is released in the completion block
[self.dataProcessor startProcessing];
Вопрос: что я делаю "неправильно" и/или как это должно быть изменено для соответствия соглашениям ARC?