Как говорит @matt, если вы просто ничего не делаете, ARC должен очистить, когда ваш объект освобожден - присваивая DBRequest
, который вы создаете, переменной обработчика экземпляра, которая ( при условии , конечно, ваш объект переживает объект вы создаете).
Если вам нужно освободить DBRequest
до того, как ваш объект умрет, вам нужен ARC-совместимый "трюк", эквивалентный [[theDbRequest retain] autorelease]
. Теперь, если вы не создаете свои собственные пулы автоматических выпусков, ваш предыдущий подход сработает в конце текущего события. Следуя этой логике, попробуйте:
- Добавьте метод к вашему классу, который просто устанавливает
theDbRequest
в nil
, давайте назовем это cleanUpTheDbRequest
.
- Измените ваш обратный вызов делегата, чтобы вызывать
[self performSelectorOnMainThread:@selector(cleanUpTheDbRequest) withObject:nil waitUntilDone:NO]
вместо прямого присвоения nil
theDbRequest
Это должно задержать присвоение nil
до окончания текущего события, как это сделал ваш трюк с авто-выпуском. Это также работает, если ваш DBRequest
живет в нескольких событиях - предыдущий метод запускается в конце события, в которое вызывается autorelease
, этот метод в конце события, в котором вызывается метод делегата.