Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 初始化这些变量时使用self.variable和_变量的区别_Objective C_Declared Property - Fatal编程技术网

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
,否则请坚持使用getter
self.label
。在初始化过程中,您可能需要使用
\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。

在您的示例中,
self.label
将在self上调用getter方法“label”——这相当于调用
[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。没有围绕它的getter方法

区别非常非常重要,因为您可以覆盖属性的getter/setter方法。您可能希望这样做,例如,如果您希望将某些行为更改与变量的状态更改捆绑在一起。调用getter或setter可以保持这种行为。调用getter也会保留变量


基本上,除非您知道为什么在任何特定情况下更喜欢使用class
\u label
,否则请坚持使用getter
self.label
。在初始化过程中,您可能需要使用
\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。

在您的示例中,
self.label
将在self上调用getter方法“label”——这相当于调用
[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。没有围绕它的getter方法

区别非常非常重要,因为您可以覆盖属性的getter/setter方法。您可能希望这样做,例如,如果您希望将某些行为更改与变量的状态更改捆绑在一起。调用getter或setter可以保持这种行为。调用getter也会保留变量


基本上,除非您知道为什么在任何特定情况下更喜欢使用class
\u label
,否则请坚持使用getter
self.label
。在初始化过程中,您可能需要使用
\u label
的一种情况是,您需要设置getter可能带来的愉快的默认w/o行为。

在您的示例中,
self.label
将在self上调用getter方法“label”——这相当于调用
[self label]
\u label
是类实例属性(即实例变量)的后备存储,与直接访问标准变量没有区别。那里