我已经看到下面的代码以 3 种不同的方式编写(关于 IBOutlet)这有关系吗,我会说将 IBOutlet 添加到声明和@property 会更简洁。
只是属性(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
干杯加里
最佳答案
IBOutlet
只对 InterfaceBuilder 有影响。对于编译器,UINibDeclarations.h #define
将其置为空。
InterfaceBuilder 将 IBOutlet
作为头文件中的提示,以列出该类的可用 socket 。如果将对象连接到 IBOutlet
,无论它是定义为属性还是实例变量,此信息都会写入 nib。
加载 nib 时,加载程序会尝试找到建立连接的最佳方法:首先,它会尝试找到具有适当名称的 setter 方法。如果没有找到这样的 setter ,它会回退到直接设置实例变量,这是一种糟糕的风格,因为这种方式内存管理不明确。
您提出的所有示例都具有正确名称的属性(当然还有 setter 方法)。因此,在每种情况下,加载器都会使用 setter 方法,无论 IBOutlet
标记位于何处:您的示例之间没有区别,无论是在 Nib 上,还是在代码执行方式上。
最好的样式是将 IBOutlet
标记放入属性定义中。
关于objective-c - IBOutlet 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206940/