2013-03-26 5 views
2

Я новичок в ARC. Моя проблема в том, что если мы создадим свойство типа strong на контроллере представления, нам нужно сделать его нулевым, если произойдет popViewController навигационного контроллера.ARC в iOS 6 против iOS 5

Обычно мы делаем это в viewDidUnload. Но в iOS 6 это устарело.

Итак, где мы делаем этот объект nil? Apple говорит, чтобы сделать это в didReceiveMemoryWarning, но этот метод не вызывается каждый раз, когда мы выходим на контроллер вида.

ответ

0

Если вы выскочите/нажали между теми же двумя контроллерами представления, то указатель в UINavigationController не должен меняться, пока они не получают dealloc'ed. Если они получают dealloc'ed, то все в них должно быть dealloc'ed тоже. Вы можете создать новые копии этих контроллеров представлений, но это не должно быть проблемой, потому что вы создаете только новые копии, если старые уже освобождены. Единственный способ сохранить объекты - если ваши контроллеры представлений (или объекты внутри них) ссылаются друг на друга, заставляя их сохранять.

Разница между strong и weak заключается не в том, что вам необходимо вручную установить strong на ноль. Скорее, отношение strong приведет к сохранению объекта, а weak - нет. Вот почему делегатам обычно присваивается значение weak, так как вы не хотите, чтобы делегат сохранял свой родительский объект (не родительский, но объект, который является делегатом).

4

Не беспокойтесь об этом. Все ваши свойства будут установлены в nil автоматически с помощью среды выполнения Objective-C в dealloc. Это справедливо для всех свойств, а не только для точек на контроллере.

+0

Но в моем приложении, если я переключаюсь между одним и тем же viewController несколько time.App размер распределения увеличивается, и это приводит к сбою. Я думаю, это из-за ARC. – Sachin

+0

Тогда вы делаете что-то еще неправильно, возможно, создав несколько копий вашего контроллера вида. Конечно, не удастся помочь, если вы не разместите свой код. –

+0

Код i не могу положить. Но я делаю простой поп и толчок. При нажатии на кнопку я перехожу к AViewController и AViewController имеет кнопку возврата. Я нажимаю эту кнопку, просто играю только с этими двумя кнопками – Sachin

1

Вы определяете свойство strong, если хотите сохранить собственность на указанном объекте.

Из-за того, что я могу понять, вам, вероятно, нужна слабое свойство (когда ваш объект освобожден кем-то другим, вам он не нужен, и его можно освободить), или, возможно, обходным путем можно было бы установить его на ноль в методе viewDidDisappear , но, как сказал Джим Пульс, не видя, что вы кодекс мой, просто образованные догадки ...

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