objective-c - IBOutlet 声明?

标签 objective-c cocoa-touch

我已经看到下面的代码以 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/

相关文章:

iphone - UIDocument、NSFileWrapper 和图像

ios - 构建聊天应用程序时应该使用 UITableView 还是 UICollectionView?

iOS 7 AutoLayout 底部屏幕的粘性按钮

iphone - 将数据保存到缓存目录时出错 (iPhone)

ios - iOS 中自动保存标签和开关信息

objective-c - 不兼容的指针类型

ios - 如何重复循环 dispatch_after 语句?

objective-c - iBeacon 发射器的 major 和 minor 的最大值是多少?

iphone - UILabel 和上标

objective-c - Objective-C : Adding Action On Array of Buttons