1

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

@implementation FunnyScreen {
  __weak IBOutlet SillyButton *bouton;
}

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

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

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

4

1 回答 1

2

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

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

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

就个人而言,我经常使用 ivars 来实现这一点:不变的内部值——即使在这些属性无处不在的日子里。我不能肯定这就是这段代码的作者的想法,但这似乎是合理的。

于 2017-05-25T01:03:12.380 回答