IBOutlet и пожизненный классификатор в ARC - PullRequest
2 голосов
/ 06 декабря 2011

Шаблонное приложение «MasterDetail» записывает свойство IBOutlet в DetailViewController.h с квалификатором strong.

@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel; 

Во время уроков Standford CS193 из iTunesU (урок 2 раз в 14:30) ониустановите IBOutlet как weak, говоря, что метка уже имеет сильный указатель на нее, созданный окном.

Теперь мой вопрос: как нам объявить хранилище для IBOutlet, как Label и Button?правильно ли пользоваться слабым?и если я на iOS4 это нормально использовать unsafe_unretained?

РЕДАКТИРОВАТЬ -----

Я нашел ответ о сильных или слабых ... основные правила:

  • Использование strong для элементов верхнего уровняxib
  • Используйте weak для подэлементов, таких как кнопки надписей и т.д ..

Вы можете проверить документацию
Но я все еще не могу найтичто-то про iOS 4

1 Ответ

4 голосов
/ 06 декабря 2011

Ну, это в основном тот же случай, что и в MRC.

Ваши IBOutlets обычно находятся в иерархии представлений вашего контроллера и неявно сохраняются их родительскими представлениями.Вы можете использовать assign (MRC) или weak или unsafe_unretained (ARC).Во всех случаях ваш указатель становится недействительным, когда вы удаляете объект из иерархии представлений.Единственное отличие состоит в том, что в MRC и ARC 4.0 указатель не устанавливается автоматически на ноль.Он по-прежнему содержит адрес памяти, но адрес недействителен.В любом случае вам больше не следует использовать указатель.

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

Обратите внимание, что многие примеры используют strong для каждого IBOutlets, и это не ошибка.Это просто не нужно.

...