IBOutlet
имеет значение только для InterfaceBuilder. Для компилятора UINibDeclarations.h #define
s ничего не значит.
InterfaceBuilder принимает IBOutlet
в качестве подсказки из файла заголовка, чтобы перечислить доступные выходы для класса. Если вы подключаете объект к IBOutlet
, независимо от того, определен ли он как свойство или переменная экземпляра, эта информация записывается в перо.
При загрузке пера загрузчик пытается найти наилучший из возможных способов настройки соединения: сначала он пытается найти метод установки с соответствующим именем. Если такой установщик не найден, он возвращается к установке переменной экземпляра напрямую, что является плохим стилем, потому что управление памятью не совсем понятно.
Все ваши предложенные примеры имеют свойство (и, конечно, метод установки) правильного имени. Так что в каждом случае загрузчик будет использовать метод setter, независимо от того, где стоит тег IBOutlet
: нет разницы между вашими примерами, ни в nib, ни в способе выполнения кода.
Наилучшим стилем было бы поместить тег IBOutlet
в определение свойства.