Неявное self
переменная на самом деле видимо в рамках всего выбора, не используя или иначе. Как указано, хотя, в настоящее время это не представляет ценности в выборе потребления, потому что поведение выбора потребления состоит в том, что экземпляр контракта, на котором осуществлен выбор, заархивирован перед казнью органа по выбору (то есть, семантика "предварительно использует"). В выпуске будущего набор аннотаций выбора расширится для включения preconsuming
и postconsuming
. В выборе постпотребления контракт, упомянутый self
, останется активным всюду по органу по выбору и будет заархивирован в конце. Выбор, не аннотируемый preconsuming
, noconsuming
или postconsuming
, примет значение по умолчанию к семантике перед потреблением (как это сегодня).
Авария происходит внутри кода Apple (поэтому отладчик не показывает вам источник), и причина этого на самом деле где-то в другом месте - вы выпустили временный объект, который должен был быть освобожден автоматическим выпуском пула. Это привело к сбою пула автозапуска.
Вы должны освободить только те объекты, которые:
keep
init
, скопируйте
и только новые
методы (и их варианты, содержащие эти слова) К сожалению, вы не можете узнать этот метод из отладчика, только из документации и опыта…
Вы можете использовать Clang Analyzer для обнаружения таких ошибок (иногда).
Вы должны включить NSZombieEnabled для устранения проблем с чрезмерным выпуском, например:
http://cocoadev.com/index.pl?NSZombieEnabled
http: //www.fromconcentratesoftware .com / 2007/08/09 / nszombieenabled-for-the-debugger-negative /
http://www.tomwhitson.co.uk/blog/2009/04/debugging-with-nszombiesenabled/