iOS 5 + ARC - освобождает ли назначение nil указателю память? - PullRequest
5 голосов
/ 07 ноября 2011

Я пытаюсь соответствовать рекомендациям Apple по реагированию на предупреждения о нехватке памяти в моем приложении. В рекомендациях говорится: «Получив (предупреждение о нехватке памяти), ваше приложение должно освободить как можно больше памяти, освободив ненужные ему объекты или очистив кеши памяти, которые могут быть созданы позже».

Вопрос в том, как «освободить» память, используя ARC?

Например, предположим, у меня есть изображение в иерархии представлений вида, которого нет на экране. В didReceiveMemoryWarning я в настоящее время удаляю его из представления, вызывая removeFromSuperview, но у меня все еще есть указатель на сам UIImage. Должен ли я также попытаться освободить эту память? Как? Присваивая nil указателю?

TIA: Джон

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011
  1. К тому времени, как вы получите -didReceiveMemoryWarning, ваше представление должно быть автоматически отменено системой и должен быть вызван -viewDidUnload.Поэтому, если у вас нет ссылок на подпредставления представления, вы не несете ответственности за их освобождение.

  2. В противном случае, если у вас есть ссылки на некоторые ресурсы, которые вы хотите освободить, выпросто аннулируйте ваши ссылки, назначив им «nil» для NSObject s, и вызовите соответствующие функции выпуска для других типов ссылок, например, CFRelease для Core Foundation объектов.

0 голосов
/ 08 ноября 2011

Создайте все IBOutlet свойства с атрибутом strong.

Установите для всех IBOutlet свойств все значение nil в viewDidUnload.

...