为什么将IBOutlet变量设为ivar(不是属性)?

时间:2017-05-24 23:29:31

标签: objective-c cocoa-touch ivar declared-property

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

@implementation FunnyScreen {
  __weak IBOutlet SillyButton *bouton;
}

而不是我一直以来所做过的事情以及其他人所做的事情:

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

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

1 个答案:

答案 0 :(得分:2)

关于合成属性的好处在于它在一个简洁的代码行中为您提供了三件事:存储加两个存取方法。

但是如果你不需要那些访问方法呢?如果价值一旦设定,它永远不会改变怎么办?并且您不需要在此课程之外访问(这通常是IBOutlet s的一个好规则)?

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

就我个人而言,我经常使用ivars:不变的内部价值 - 即使在无处不在的财产的这些日子里。我无法肯定地说这段代码的作者在想什么,但这似乎是合理的。