在viewDidLoad上使用属性访问器 - 目标C.

时间:2016-06-29 10:35:16

标签: ios objective-c properties accessor viewdidload

据我所知,除了两种情况外,你应该总是使用访问器来访问或修改属性:

  • 初始化
  • 的dealloc
  

不要在初始化方法和dealloc中使用访问器方法   您不应该使用访问器方法来设置实例变量   在初始化方法和dealloc中。初始化计数器对象   如果数字对象代表零,则可以实现init。

此异常是因为在视图未完全初始化时调用访问器可能会在覆盖setter / getters时出现问题(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html

因此,根据这一点,在viewDidLoad上使用访问者应该非常好,甚至建议使用,但是在互联网开发人员可用的大多数代码中,使用_ivars上的viewDidLoad和我想知道为什么。是否有理由在_ivars中使用属性viewDidLoad而不是访问者?

3 个答案:

答案 0 :(得分:0)

关于在init / dealloc方法中使用访问器的最有价值的帖子之一 https://www.mikeash.com/pyblog/friday-qa-2009-11-27-using-accessors-in-init-and-dealloc.html

答案 1 :(得分:0)

  

您应该始终使用访问者来访问或修改属性

你在哪里读到这个?

如果要访问属性,可以使用_ivar(或self->_ivar)直接访问实例变量而不通过getter,解析和执行getter会更快。 但是,如果您使用自定义getter,则不会执行它。

答案 2 :(得分:0)

通常会覆盖属性访问器以更新视图,如果该视图尚不可见,则效率较低。因此,您可能发现ivar直接使用该代码来防止这种情况的代码。但是,更好的方法是使用该属性,但检查视图是否可见,并且仅在必要时进行更新。可以从viewWillAppear调用相同的方法。