我已经看到下面的代码以三种不同的方式编写(关于IBOutlet),我想说将IBOutlet添加到声明和@属性中会更简洁。
只是属性:
@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
干杯加里
发布于 2010-02-05 19:55:29
应该无关紧要。使用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
发布于 2010-02-05 20:06:18
只有对InterfaceBuilder来说,IBOutlet
才重要。对于编译器,UINibDeclarations.h #define
将其设置为空。
InterfaceBuilder将IBOutlet
作为头文件中的一个提示,以列出该类的可用插座。如果将对象连接到IBOutlet
,则无论它是定义为属性变量还是实例变量,此信息都会写入nib。
在加载nib时,加载器会尝试找到建立连接的最佳方法:首先,它会尝试找到一个具有适当名称的setter方法。如果找不到这样的setter,它会退回到直接设置实例变量,这是一种糟糕的风格,因为这种方式不能清楚地进行内存管理。
您提出的所有示例都有一个名称正确的属性(当然还有一个setter方法)。因此,在每种情况下,无论IBOutlet
标记位于何处,加载器都将使用setter方法:示例之间没有区别,无论是nib还是执行代码的方式。
最好的方式是将IBOutlet
标记放入属性定义中。
发布于 2010-02-05 20:08:47
苹果示例代码中的当前样式将IBOutlet放在属性声明中。为了保持一致性,这可能是抛出它的最佳位置。
https://stackoverflow.com/questions/2206940
复制相似问题