Ios 方法的@property和getter/setter之间有什么区别;“看”;比如房产?
我理解关键差异/流程。属性为类变量创建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
\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";