据我所知,除了两种情况外,你应该总是使用访问器来访问或修改属性:
不要在初始化方法和dealloc中使用访问器方法 您不应该使用访问器方法来设置实例变量 在初始化方法和dealloc中。初始化计数器对象 如果数字对象代表零,则可以实现init。
此异常是因为在视图未完全初始化时调用访问器可能会在覆盖setter / getters时出现问题(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html)
因此,根据这一点,在viewDidLoad
上使用访问者应该非常好,甚至建议使用,但是在互联网开发人员可用的大多数代码中,使用_ivars
上的viewDidLoad
和我想知道为什么。是否有理由在_ivars
中使用属性viewDidLoad
而不是访问者?
答案 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
调用相同的方法。