为什么要使IBOutlet变量成为ivar(而不是属性)



我一直在仔细阅读一个开源项目,该项目使用包含几个视图控制器的故事板。出于某种原因,UI 元素不使用 .h 文件中的@property IBOutlet声明,而是在 .m 文件中声明 ivar(有时__weak(,如下所示:

@implementation FunnyScreen {
  __weak IBOutlet SillyButton *bouton;
}

而不是我一直在做和看到其他人做的事情:

@interface FunnyScreen: UIViewController
@property (nonatomic,strong) IBOutlet SillyButton *bouton;

有谁知道为什么有人会像第一个示例(即 ivar 方法(那样编写代码?它有什么用吗?我保持开放的心态。

合成属性的伟大之处在于,它在一行简洁的代码中为您提供了三件事:存储和两个访问器方法。

但是,如果您不需要这些访问器方法怎么办?如果一旦设置了值,它就永远不会改变怎么办?而且你不需要在此类之外访问(这通常是IBOutlet的好规则(?

好吧,那么你只需要存储,这是在实现块中声明的 ivar。

就我个人而言,我经常使用ivars来表示:不变的内部值 - 即使在这些无处不在的时代。我不能肯定地说这就是这段代码的作者在想的,但这似乎是合理的。

最新更新