Объявления IBOutlet?
Я видел код, написанный тремя разными способами (в отношении 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
cheers gary
Ответы
Ответ 1
Не важно. С 10.6 64-разрядным SDK вы также можете записать свойство без ivar:
@class SwitchViewController;
@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
}
@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end
Ответ 2
IBOutlet
имеет значение только для InterfaceBuilder. Для компилятора UINibDeclarations.h #define
это ничего.
ИнтерфейсBuilder принимает IBOutlet
как подсказку из файла заголовка, чтобы отобразить доступные выпуски для класса. Если вы привязываете объект к IBOutlet
, независимо от того, определяется ли он как переменная свойства или экземпляра, эта информация записывается в nib.
При загрузке ниба загрузчик пытается найти наилучший способ настройки соединения: сначала он пытается найти метод сеттера с соответствующим именем. Если такой сеттер не найден, он возвращается к установке переменной экземпляра напрямую, что является плохим стилем, потому что управление памятью не так ясно.
Все ваши предлагаемые примеры имеют свойство (и, конечно же, метод setter) правильного имени. Таким образом, в каждом случае загрузчик будет использовать метод setter, независимо от того, где стоит тег IBOutlet
: Нет никакой разницы между вашими примерами, ни в nib, ни в том, как выполняется код.
Лучший стиль - поместить тег IBOutlet
в определение свойства.
Ответ 3
Текущий стиль в примере кода Apple помещает IBOutlet в объявление свойства. Для согласованности это, вероятно, лучшее место для его броска.
Ответ 4
Я также нашел этот способ (без объявления свойств):
@class SwitchViewController;
@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UIWindow *window;
IBOutlet SwitchViewController *switchViewController;
}
@end
Как насчет этого?