Objective c 为什么要将IBOutlet变量设置为ivar(而不是属性)?

Objective c 为什么要将IBOutlet变量设置为ivar(而不是属性)?,objective-c,cocoa-touch,ivar,declared-property,Objective C,Cocoa Touch,Ivar,Declared Property,我一直在阅读一个开源项目,它使用了一个包含几个视图控制器的故事板。出于某种原因,UI元素在.h文件中不使用@property IBOutlet声明,而是在.m文件中声明ivar(有时是\uu-weak),如下所示: @implementation FunnyScreen { __weak IBOutlet SillyButton *bouton; } 而不是我一直做的和看到其他人做的: @interface FunnyScreen: UIViewController @property (

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

@implementation FunnyScreen {
  __weak IBOutlet SillyButton *bouton;
}
而不是我一直做的和看到其他人做的:

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

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

合成属性的好处在于,它在一行简洁的代码中提供了三件事:存储加上两个访问器方法

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

那么,您只需要存储,它是在实现块中声明的ivar


就我个人而言,我经常使用IVAR就是为了实现这一点:不改变内部值——即使在现在到处都是属性的情况下也是如此。我不能确定这段代码的作者是这么想的,但这似乎是合理的。

好的,那么你认为他们为什么会让它变弱呢?这是一个很好的问题。我没有好的答案。要么是习惯/反射,要么(似乎不太可能),他们希望它在某个时候消失,但在那之后不会再被设置,并希望自动为零的行为。