Декларации IBOutlet? - PullRequest
       20

Декларации IBOutlet?

11 голосов
/ 05 февраля 2010

Я видел приведенный ниже код, написанный тремя разными способами (в отношении IBOutlet). Имеет ли это значение, я бы сказал, что добавление IBOutlet к объявлению и @property было более лаконичным.

ПРОСТО НЕДВИЖИМОСТЬ:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    SwitchViewController *switchViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end

ПРОСТО ДЕКЛАРАЦИЯ:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) SwitchViewController *switchViewController;
@end

ОБА:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end

Ура Гэри

Ответы [ 4 ]

11 голосов
/ 05 февраля 2010

IBOutlet имеет значение только для InterfaceBuilder. Для компилятора UINibDeclarations.h #define s ничего не значит.

InterfaceBuilder принимает IBOutlet в качестве подсказки из файла заголовка, чтобы перечислить доступные выходы для класса. Если вы подключаете объект к IBOutlet, независимо от того, определен ли он как свойство или переменная экземпляра, эта информация записывается в перо.

При загрузке пера загрузчик пытается найти наилучший из возможных способов настройки соединения: сначала он пытается найти метод установки с соответствующим именем. Если такой установщик не найден, он возвращается к установке переменной экземпляра напрямую, что является плохим стилем, потому что управление памятью не совсем понятно.

Все ваши предложенные примеры имеют свойство (и, конечно, метод установки) правильного имени. Так что в каждом случае загрузчик будет использовать метод setter, независимо от того, где стоит тег IBOutlet: нет разницы между вашими примерами, ни в nib, ни в способе выполнения кода.

Наилучшим стилем было бы поместить тег IBOutlet в определение свойства.

7 голосов
/ 05 февраля 2010

не должно иметь значения. С 10.6 64-битным SDK вы также можете написать свойство без ивара:

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end
3 голосов
/ 05 февраля 2010

Текущий стиль в примере кода Apple помещает IBOutlet в объявление свойства. Для последовательности, это, вероятно, лучшее место, чтобы бросить его.

0 голосов
/ 14 июня 2010

Я также нашел этот способ (без объявления свойства):

@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@end

А как насчет этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...