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

Ios 在viewDidLoad上使用属性访问器-目标C,ios,objective-c,properties,accessor,viewdidload,Ios,Objective C,Properties,Accessor,Viewdidload,据我所知,您应该始终使用访问器访问或修改属性,以下两种情况除外: 初始化 解除锁定 不要在初始值设定项方法中使用访问器方法,而只对 不应使用访问器方法设置实例变量的位置 在初始值设定项方法和解除锁定中。初始化计数器对象的步骤 对于表示零的number对象,可以实现init 此异常是因为在视图未完全初始化时调用访问器可能会在重写setter/getter()时引发问题 因此,根据这一点,在viewDidLoad上使用访问器应该是非常好的,甚至是推荐的,但是在互联网上可用的大多数代码中,开发者在

据我所知,您应该始终使用访问器访问或修改属性,以下两种情况除外:

  • 初始化
  • 解除锁定
不要在初始值设定项方法中使用访问器方法,而只对 不应使用访问器方法设置实例变量的位置 在初始值设定项方法和解除锁定中。初始化计数器对象的步骤 对于表示零的number对象,可以实现init

此异常是因为在视图未完全初始化时调用访问器可能会在重写setter/getter()时引发问题


因此,根据这一点,在
viewDidLoad
上使用访问器应该是非常好的,甚至是推荐的,但是在互联网上可用的大多数代码中,开发者在
viewDidLoad
上使用
\ivar
,我想知道为什么。使用属性
\u ivars
而不是
viewDidLoad
中的访问器有什么原因吗?

关于在init/dealloc方法中使用访问器的最有价值的帖子之一

关于在init/dealoc方法中使用访问器的最有价值的帖子之一

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

你在哪里读到的

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

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

你在哪里读到的

当您想要访问属性时,可以使用
\u ivar
(或
self->\u ivar
)直接访问实例变量,而无需经过getter,解析和执行getter会更快。

但是,如果使用自定义getter,则不会执行它。

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

通常会覆盖属性访问器以更新视图,如果视图还不可见,则效率低下。因此,您发现ivar直接使用的代码可能是为了防止这种情况。但是,更好的方法是使用属性,但检查视图是否可见,并仅在必要时更新。同样的方法也可以从
viewwillappeand

调用。这篇文章只是解释了我已经说过的关于在init和dealloc上使用访问器的内容,它并没有回答我的问题。如果使用property,有一些好处:可以在getter/setter方法上设置断点,重写getter/setter方法。
ivars
的好处是:您可以将其用作@public、@protected、@private,这比属性中的属性更容易。我的意思是
\u ivars
,而
ivars
的好处并不能回答为什么只在
viewDidLoad
上使用它们。我的问题是为什么要使用viewDidLoad中的属性
\u ivars
而不是任何其他方法中的访问器(除了
init
dealloc
),我还发现github中的许多代码在
viewDidLoad
中使用属性。我认为这取决于开发人员。这篇文章只是解释了我已经说过的关于在init和dealloc上使用访问器的内容,并没有回答我的问题。如果使用属性,有一些好处:可以在getter/setter方法上设置断点,重写getter/setter方法。
ivar
:可以将其用作@public,@protected,@private比property更容易我指的是属性中的
\u ivars
,而
ivars
的好处并不能解释为什么只在
viewDidLoad
上使用它们。我的问题是为什么要使用viewDidLoad中的属性
\u ivars
而不是任何其他方法中的访问器(除了
init
dealloc
),我还发现github中的许多代码在
viewDidLoad
中使用属性。我认为这取决于开发人员。苹果文档特别规定使用访问器方法设置属性值是的,但这不是强制性的,您可以同时使用这两种方法,但访问器方法更易于内存管理。例如,如果使用
copy
attribute设置属性,直接设置ivar不会生成副本,因为这是设置者的角色。另外,在使用
retain
属性创建ARC之前,您需要在设置ivar之前/之后释放/保留ivar。但对于ARC来说,这不再是一个问题,设置一个强大的ivar将自动释放/保留它。苹果文档特别是
使用访问器方法设置属性值
是的,但这不是强制性的,您可以同时使用这两种方法,但访问器方法更便于内存管理。例如,如果使用
copy
attribute设置属性,直接设置ivar不会生成副本,因为这是设置者的角色。另外,在使用
retain
属性创建ARC之前,您需要在设置ivar之前/之后释放/保留ivar。但对于ARC,这不再是一个问题,设置一个强大的ivar将自动释放/保留它