Я потратил некоторое время на отладку странной проблемы с ARC и пользовательскими функциями освобождения.
NSOperation
класс DataRequest
DataRequest
содержит ТОЛЬКО ссылку на созданную мной операцию и уничтожается в блоке завершения операции.Он ВСЕГДА уничтожается (его dealloc
всегда выполняется) dealloc
. У меня есть только один вызов NSLog. ... и проблема такова:
Если я запустил это в отладчике, точка останова в dealloc никогда не сработает, сообщение журнала никогда не появится. Сначала я думал, что операция протекает.
Если я запустил это в инструментах, все в порядке, системная консоль распечатает сообщение, а инструмент распределения сообщает, что операция освобождается от правильного снимка стека, включая пользовательское освобождение. Утечек не обнаружено.
Я на 100% уверен, что использую одни и те же настройки компилятора для отладки и профилирования.
Самая запутанная вещь в конце: если я создам собственную версию [DataRequest dealloc]
и добавлю к ней self.operation = nil;
- все будет работать нормально, даже из отладчика.
Кто-нибудь может подсказать, какие параметры компоновщика компилятора попытаться увидеть разницу? может ли это быть ошибкой в инструментах Apple (все мы были в положении, обвиняющем большую рыбу в собственных ошибках, верно?)
... и да, я пробовал с GDB и LLDB. Результат был тот же - что-то могло указывать.
Я попытался создать минималистичный образец, но он просто сработал (действительно);)
Спасибо