Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
Ios 方法的@property和getter/setter之间有什么区别;“看”;比如房产?_Ios_Properties_Setter_Getter - Fatal编程技术网

Ios 方法的@property和getter/setter之间有什么区别;“看”;比如房产?

Ios 方法的@property和getter/setter之间有什么区别;“看”;比如房产?,ios,properties,setter,getter,Ios,Properties,Setter,Getter,我理解关键差异/流程。属性为类变量创建getter和setter。它还(现在)使用前缀为\ucode>的私有变量对其进行合成 太好了 现在,我想要一些方法像属性一样工作。所以我有一个UIView子类,它有一个UILabel子视图 我想创建两个方法-(NSString*)text和setText:(NSString*)text,以设置和获取UILabel的文本 显然,这就像一个属性(您可以执行[myCustomElement text]和[myCustomElement setText:@“wha

我理解关键差异/流程。属性为类变量创建getter和setter。它还(现在)使用前缀为
\ucode>的私有变量对其进行合成

太好了

现在,我想要一些方法像属性一样工作。所以我有一个
UIView
子类,它有一个
UILabel
子视图

我想创建两个方法
-(NSString*)text
setText:(NSString*)text
,以设置和获取UILabel的文本

显然,这就像一个属性(您可以执行
[myCustomElement text]
[myCustomElement setText:@“whatever”]
),因此我觉得应该定义一个属性,但这有什么用呢

我的接受者和接受者将如下所示:

- (NSString *)text {
    return self.textLabel.text;
}

- (void)setText:(NSString *)text {
    self.textLabel.text = text;
}

长故事短:@synthesis生成getter和setter。因此,使用合成可以节省打字时间

但是,您的代码与
@synthesis textlab
不同,因为您的代码只允许更改标签文本@合成将允许更改所有属性

下面是一些关于@synthesis/getter/setter的有用信息


长故事短:@合成产生了getter和setter。因此,使用合成可以节省打字时间

但是,您的代码与
@synthesis textlab
不同,因为您的代码只允许更改标签文本@合成将允许更改所有属性

下面是一些关于@synthesis/getter/setter的有用信息


如果将其声明为属性,并重写getter/setter,则可以使用点表示法更改或检索该值

例:


如果将其声明为属性,并重写getter/setter,则可以使用点表示法更改或检索该值

例:


文本已经是CustomElement属性textLabel的属性(称为文本)(这就是为什么您使用点符号yourCustomElement.textLabel.text访问它)

在本例中,text属性的getter/setter应该/只能位于textLabel类内部


这两个方法只是设置/获取属性属性的方便方法(很好,但它们不是getter/setter,不应该查看它们)

文本已经是CustomElement属性textLabel的属性(称为文本)(这就是为什么使用点符号yourCustomElement.textLabel.text访问它)

在本例中,text属性的getter/setter应该/只能位于textLabel类内部


这两个方法只是设置/获取属性属性的方便方法(很好,但它们不是getter/setter,不应该查看它们)

您可以这样做,但我不鼓励您这样做。如果方法看起来像标准的访问器方法(getter和setter),但实际上是在更新UI控件,那么在将来只会引起混淆。当方法执行不符合常规实践的函数时,这只会破坏代码的可读性。另外,您已经有了
textlab
的属性,因此这些方法对您的购买力不高

顺便说一句,标准的自动生成访问器方法提供了其他有用的功能(根据定义属性时指定的限定符进行必要的内存管理,为将来可能需要此类功能的日期启用等),因此,除非你是这些概念的专家,否则我不会用你自己的方法来代替它们


如果您使用的是不同于标准访问器方法的方法,我建议您使用将来不太可能引起混淆的方法名称。

您可以这样做,但我不鼓励您这样做。如果方法看起来像标准的访问器方法(getter和setter),但实际上是在更新UI控件,那么在将来只会引起混淆。当方法执行不符合常规实践的函数时,这只会破坏代码的可读性。另外,您已经有了
textlab
的属性,因此这些方法对您的购买力不高

顺便说一句,标准的自动生成访问器方法提供了其他有用的功能(根据定义属性时指定的限定符进行必要的内存管理,为将来可能需要此类功能的日期启用等),因此,除非你是这些概念的专家,否则我不会用你自己的方法来代替它们


如果您使用的是不同于标准访问器方法的方法,我建议您使用不太可能在将来引起混淆的方法名称。

我认为对于您的特定示例,不定义属性是可以的

酒店(据我所知)提供了方便的速记,确保在引擎盖下正确保留/释放(适当时)


我认为对于您的特定示例,不定义属性是可以的

酒店(据我所知)提供了方便的速记,确保在引擎盖下正确保留/释放(适当时)

如果有的话,这有什么用

有许多用法:

1)您可以使用属性进行一些计算、更新对象的状态或类似缓存的内容

2)您听说过可可豆中的键值编码(KVC)键值观察(KVO)吗?它们取决于属性。支票:和

3)使用属性,您可以在访问器中放入一些内存管理代码

如果有的话,这有什么用

有许多用法:

1)
myCustomElement.text = @"whatever";