Отладка Xcode и ARC проблема (пропуская освобождение)

Я потратил некоторое время на отладку странной проблемы с ARC и пользовательскими функциями освобождения.

  1. Я создаю подкласс NSOperation класс
  2. Я установил блок завершения для этой операции
  3. На операцию ссылается сильное свойство очень плоского объекта. ject (без методов, автоматические ivars, два сильных свойства) позволяет вызвать этот объект DataRequest
  4. , следуя всем рекомендациям, блок завершения использует только слабые ссылки на локальные объекты (включая саму операцию)
  5. ни компилятор, ни анализатор не генерируют любые проблемы
  6. DataRequest содержит ТОЛЬКО ссылку на созданную мной операцию и уничтожается в блоке завершения операции.Он ВСЕГДА уничтожается (его dealloc всегда выполняется)
  7. У моей операции есть собственный dealloc . У меня есть только один вызов NSLog.

... и проблема такова:

Если я запустил это в отладчике, точка останова в dealloc никогда не сработает, сообщение журнала никогда не появится. Сначала я думал, что операция протекает.

Если я запустил это в инструментах, все в порядке, системная консоль распечатает сообщение, а инструмент распределения сообщает, что операция освобождается от правильного снимка стека, включая пользовательское освобождение. Утечек не обнаружено.

Я на 100% уверен, что использую одни и те же настройки компилятора для отладки и профилирования.

Самая запутанная вещь в конце: если я создам собственную версию [DataRequest dealloc] и добавлю к ней self.operation = nil; - все будет работать нормально, даже из отладчика.

Кто-нибудь может подсказать, какие параметры компоновщика компилятора попытаться увидеть разницу? может ли это быть ошибкой в ​​инструментах Apple (все мы были в положении, обвиняющем большую рыбу в собственных ошибках, верно?)

... и да, я пробовал с GDB и LLDB. Результат был тот же - что-то могло указывать.

Я попытался создать минималистичный образец, но он просто сработал (действительно);)

Спасибо

7
задан Phlibbo 14 October 2011 в 17:52
поделиться