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