fuz*_*oat 11 cocoa-touch objective-c
我已经看到下面的代码以3种不同的方式编写(关于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
Run Code Online (Sandbox Code Playgroud)
只是声明:
@class SwitchViewController;
@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UIWindow *window;
IBOutlet SwitchViewController *switchViewController;
}
@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) SwitchViewController *switchViewController;
@end
Run Code Online (Sandbox Code Playgroud)
都:
@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
Run Code Online (Sandbox Code Playgroud)
欢呼加里
Nik*_*uhe 11
IBOutlet只对InterfaceBuilder有用.对于编译器来说,UINibDeclarations.h #define就没什么了.
InterfaceBuilder IBOutlet从头文件中提取一个提示,列出该类的可用出口.如果将对象连接到a IBOutlet,无论是将其定义为属性还是实例变量,都会将此信息写入nib.
加载nib时,加载器会尝试找到设置连接的最佳方法:首先,它尝试查找具有适当名称的setter方法.如果没有找到这样的setter,它会回退到直接设置实例变量,这样的风格很差,因为内存管理并不是这样清楚的.
您提出的所有示例都有正确名称的属性(当然还有setter方法).因此,在每种情况下,无论IBOutlet标记位于何处,加载器都将使用setter方法:您的示例之间没有区别,无论是在nib中,还是在代码执行方式上.
最好的风格是将IBOutlet标记放入属性定义中.
无所谓.使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9301 次 |
| 最近记录: |