Странная ошибка памяти dealloc / release - PullRequest
0 голосов
/ 20 сентября 2011

Я столкнулся со странной ошибкой в ​​моей программе Objective-C для iPhone.Вот что происходит:

  • Я получаю аварийное завершение EXC_BAD_ACCESS.
  • Хорошо, зомби запускаются, и журнал сообщает мне, что это CFNumber, который получает релиз, но уже освобожден.Все еще нет жесткого файла cookie.
  • Я продолжаю отлаживать, пока не получу блок с двумя номерами NSN.В моем коде нет номеров CFN, поэтому я считаю, что именно эти строки.
  • Я пытаюсь сохранить их безуспешно, даже заполняя их нулем, перезаписывая их новыми значениями и т. Д. Все еще ничего.
  • Я комментирую строки.Теперь журнал продолжает выдавать ошибки об одном и том же CFNumber, но теперь ему отправляется «doubleValue» (вместо «release»), пока он уже освобожден.В моем коде нет «doubleValue».

Что здесь происходит?Зомби портят мой код?Я нахожусь в тупике здесь.Любая помощь с благодарностью.

С уважением,

Reinder

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Вам не нужно вручную освобождать любой объект, созданный вспомогательными конструкторами, подробнее о удобные конструкторы

0 голосов
/ 20 сентября 2011

К сожалению, мало что мы можем сделать без кода.

Вот несколько общих принципов, о которых следует помнить, и которые облегчат вашу жизнь.

Вы ссылаетесь на текущий класс.

  • если вам нужно использовать его в течение длительного периода времени, сохраните его.
  • если вам это не нужно в конце функции, не сохраняйте ее (alloc, затем release в конце), если вы не сохранили ее, не отпускайте ее.
  • если вы его не распределили, не отпускайте его.
  • если вы возвращаете объект, который вы выделили, и, таким образом, теряете контроль над ним, autorelease (в значительной степени для чего он был разработан). Это соответствует принципам 3 и 4, поскольку это означает, что вызывающий класс должен будет принять решение о его сохранении или освобождении.

Надеюсь, это поможет вам точно определить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...