Генератор кода Accessorizer имеет опцию присвоить IBOutlets вместо того, чтобы сохранить их. Например, сравните эти две сгенерированных строки:
@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;
Почему я хотел бы присвоить IBOutlets при сохранении всех других свойств?
Использование зависит от платформы, как указано в руководстве по управлению памятью :
«Поведение выходов зависит от платформа (см. «Mac OS X Desktop» и «iPhone»), так что фактический Декларация отличается:
для Mac OS X, вы должны использовать: @Property (НАЗНАЧЕНИЕ) Iboutlet UserInterFaceElementClass * AnOutlet; Для ОС iPhone вы должны использовать: @Property (неатомический, удерживающий) Iboutlet UiuserInterFaceElementClass * Anoutlet; "
В iPhone OS ваше представление может выгружаться (в условиях нехватки памяти), но если у вас есть состояние, которое вас беспокоит в некоторых ваших представлениях, подключенных к розеткам, вы не хотите его потерять. Итак, вы хотите сохранить их.
Скажем, навигационный контроллер. Корневое представление выгружается из-за предупреждения о нехватке памяти, отправляемого контроллеру, но над ним в стеке находится группа контроллеров. Когда вы возвращаетесь к корневому каталогу, он перезагружает представление и возвращает ваши розетки в то же состояние, в котором они были раньше.
По крайней мере, я думаю, что это техническая причина.
Но в более общем смысле ваш контроллер заботится об этих представлениях, потому что он хочет взаимодействовать с ними. И сам по себе этот факт означает, что вы хотите сохранить их и отпустить, когда вам уже все равно. Это просто хорошая практика.
IBOutlet
не определен как ничего. Удерживая нажатой клавишу Command, щелкните слово в Xcode, чтобы увидеть его определение.
То есть это просто ловушка, которую разработчик интерфейса знает, как ее показать.
Я никогда не видел @property
, который содержал бы IBOutlet
, но Я предполагаю, что это для ситуаций вроде UIViewController
@property
view
, которое должно быть доступно из IB, но также может быть назначено во время выполнения.