2014-09-26 2 views

ответ

0

Если какой-либо метод в b вызовах [a release], то сохранить цикл нарушается. Когда ничего не принадлежит a, a будет освобожден. Предположительно, в adealloc, он [b release]. Тогда, если ничего не принадлежит b, b также будет освобожден.

Иногда цикл сохранения в порядке. Вам просто нужно убедиться, что цикл будет нарушен в соответствующее время. Например, объект может владеть одноразовым NSTimer, а таймер может владеть объектом (как target), создавая цикл сохранения. Когда срабатывает таймер, объект должен отпускать таймер, прерывая цикл удержания. Если объект отменяет таймер (отправив его invalidate) до срабатывания таймера, таймер освобождает объект, также нарушая цикл сохранения.

0

Вы создали цикл удержания в таком случае, которого следует избегать, поскольку это является формой утечки памяти.

Вот хороший подправить: http://www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html

Я бы настоятельно рекомендовал перепроектирование классов, чтобы избежать кругового требования,

Смежные вопросы