Objective c 初始化这些变量时使用self.variable和_变量的区别
我知道实例变量和属性。我经常看到人们在Objective c 初始化这些变量时使用self.variable和_变量的区别,objective-c,declared-property,Objective C,Declared Property,我知道实例变量和属性。我经常看到人们在UILabel上这样做 self.label = [[UILabel alloc] init]; //and _label = [[UILabel alloc] init]; 那么,使用self.label和\u label设置对象有什么区别呢?区别在于: 带有\u variable的名称是实例变量 self.variable正在对对象调用getter方法 在您的示例中,实例变量是自动生成的,您也不需要合成属性 如果不使用ARC,那么示例中真正重要的区别
UILabel
上这样做
self.label = [[UILabel alloc] init]; //and
_label = [[UILabel alloc] init];
那么,使用
self.label
和\u label
设置对象有什么区别呢?区别在于:
带有\u variable
的名称是实例变量
self.variable
正在对对象调用getter方法
在您的示例中,实例变量是自动生成的,您也不需要合成属性
如果不使用ARC,那么示例中真正重要的区别就开始发挥作用-
self.variable
将为您保留一个对象,如果您将属性标记为retain或strong\u variable
根本不解决内存管理问题区别在于:
带有\u variable
的名称是实例变量
self.variable
正在对对象调用getter方法
在您的示例中,实例变量是自动生成的,您也不需要合成属性
如果不使用ARC,那么示例中真正重要的区别就开始发挥作用-
self.variable
将为您保留一个对象,如果您将属性标记为retain或strong\u variable
根本不解决内存管理问题区别在于:
带有\u variable
的名称是实例变量
self.variable
正在对对象调用getter方法
在您的示例中,实例变量是自动生成的,您也不需要合成属性
如果不使用ARC,那么示例中真正重要的区别就开始发挥作用-
self.variable
将为您保留一个对象,如果您将属性标记为retain或strong\u variable
根本不解决内存管理问题区别在于:
带有\u variable
的名称是实例变量
self.variable
正在对对象调用getter方法
在您的示例中,实例变量是自动生成的,您也不需要合成属性
如果不使用ARC,那么示例中真正重要的区别就开始发挥作用-
self.variable
将为您保留一个对象,如果您使用retain或strong\u variable
标记属性,则它根本不处理内存管理在您的示例中,self.label
将在self上调用getter方法“label”——这相当于调用[self-label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。没有围绕它的getter方法
区别非常非常重要,因为您可以覆盖属性的getter/setter方法。您可能希望这样做,例如,如果您希望将某些行为更改与变量的状态更改捆绑在一起。调用getter或setter可以保持这种行为。调用getter也会保留变量
基本上,除非您知道为什么在任何特定情况下更喜欢使用class
\u label
,否则请坚持使用getterself.label
。在初始化过程中,您可能需要使用\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。在您的示例中,self.label
将在self上调用getter方法“label”——这相当于调用[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。没有围绕它的getter方法
区别非常非常重要,因为您可以覆盖属性的getter/setter方法。您可能希望这样做,例如,如果您希望将某些行为更改与变量的状态更改捆绑在一起。调用getter或setter可以保持这种行为。调用getter也会保留变量
基本上,除非您知道为什么在任何特定情况下更喜欢使用class
\u label
,否则请坚持使用getterself.label
。在初始化过程中,您可能需要使用\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。在您的示例中,self.label
将在self上调用getter方法“label”——这相当于调用[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。没有围绕它的getter方法
区别非常非常重要,因为您可以覆盖属性的getter/setter方法。您可能希望这样做,例如,如果您希望将某些行为更改与变量的状态更改捆绑在一起。调用getter或setter可以保持这种行为。调用getter也会保留变量
基本上,除非您知道为什么在任何特定情况下更喜欢使用class
\u label
,否则请坚持使用getterself.label
。在初始化过程中,您可能需要使用\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。在您的示例中,self.label
将在self上调用getter方法“label”——这相当于调用[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。那里