gpt4 book ai didi

ios - 连接 IBOutlets、变量、属性或两者?

转载 作者:可可西里 更新时间:2023-11-01 05:57:42 26 4
gpt4 key购买 nike

当结合使用 IB 和辅助 View 时,您可以按住 Control 键将 IB 中的一个元素拖到 .h 文件中并创建一个导出。您可以将它拖到 2 个位置之一,在变量声明 block 内或 block 外。

如果你把它拖到变量 block 中,你会得到这样的东西:

@interface MyViewController : UIViewController {
IBOutlet UIButton *foo;
}

将它拖到 block 外会给你类似的东西......

@interface ViewController : UIViewController {
}
@property (retain, nonatomic) IBOutlet UIButton *foo;

我想过它们有何不同,但我有点困惑。好的,我知道合成属性会产生一些魔力并在运行时创建实例变量(仅在 64 位/ARM 上)。所以我相信我了解这 2 个选项的工作原理。

什么是最好的选择?第一个选项生成的代码较少,而且看起来更简单。

第二个版本提供了公共(public)访问器/修改器,但我很少从类(class)之外访问 socket (即使我这样做,也几乎总是封装)。从我开始 iOS 工作起,我就专门使用这个选项。

在大多数情况下,我是否遗漏了什么或者我应该切换到基于变量的 socket ?

最佳答案

在属性声明中声明 IBOutlet 的能力比较新 @property (retain, nonatomic) IBOutlet UIButton *foo;

以前,您必须在大括号内声明 IBOutlet UIButton *foo,然后合成该属性。现在,在花括号中声明 IBOutlet 是多余的。

您现在有两种选择来声明属性。选项 1 是在您的 .h 文件中声明它,这将使其公开。或者,您可以使用以下方法在 .m 文件中创建私有(private)接口(interface):

@interface MYCLASS()
@end

并在那里声明你的属性。这是我的首选方式,除非我需要对该属性进行公共(public)访问(如果您遵守 MVC 约定,这应该是异常(exception)情况,而不是常态)。

关于ios - 连接 IBOutlets、变量、属性或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com