首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IBOutlet声明?

IBOutlet声明?
EN

Stack Overflow用户
提问于 2010-02-05 19:50:14
回答 4查看 9.3K关注 0票数 11

我已经看到下面的代码以三种不同的方式编写(关于IBOutlet),我想说将IBOutlet添加到声明和@属性中会更简洁。

只是属性:

代码语言:javascript
运行
复制
@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    SwitchViewController *switchViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end

只需声明:

代码语言:javascript
运行
复制
@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    IBOutlet SwitchViewController *switchViewController;
}

@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) SwitchViewController *switchViewController;
@end

两者:

代码语言:javascript
运行
复制
@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

干杯加里

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-05 19:55:29

应该无关紧要。使用10.6 64位SDK,您还可以编写不带ivar的属性:

代码语言:javascript
运行
复制
@class SwitchViewController;

@interface iPhone_switcherAppDelegate : NSObject <UIApplicationDelegate> {
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@end
票数 7
EN

Stack Overflow用户

发布于 2010-02-05 20:06:18

只有对InterfaceBuilder来说,IBOutlet才重要。对于编译器,UINibDeclarations.h #define将其设置为空。

InterfaceBuilder将IBOutlet作为头文件中的一个提示,以列出该类的可用插座。如果将对象连接到IBOutlet,则无论它是定义为属性变量还是实例变量,此信息都会写入nib。

在加载nib时,加载器会尝试找到建立连接的最佳方法:首先,它会尝试找到一个具有适当名称的setter方法。如果找不到这样的setter,它会退回到直接设置实例变量,这是一种糟糕的风格,因为这种方式不能清楚地进行内存管理。

您提出的所有示例都有一个名称正确的属性(当然还有一个setter方法)。因此,在每种情况下,无论IBOutlet标记位于何处,加载器都将使用setter方法:示例之间没有区别,无论是nib还是执行代码的方式。

最好的方式是将IBOutlet标记放入属性定义中。

票数 11
EN

Stack Overflow用户

发布于 2010-02-05 20:08:47

苹果示例代码中的当前样式将IBOutlet放在属性声明中。为了保持一致性,这可能是抛出它的最佳位置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2206940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档