[英]What is the difference between an @property and getters/setters for methods that “look” like properties?
我了解主要差異/過程。 屬性為類變量創建吸氣劑和吸氣劑。 它還(現在)使用帶有_
前綴的私有變量對其進行合成。
大。
現在,我希望某些方法像屬性一樣。 所以我有一個UIView
子類,其中有一個UILabel
子視圖。
我想創建兩個方法- (NSString *)text
和setText:(NSString *)text
,以設置和獲取UILabel的文本。
顯然,這就像一個屬性(您可以執行[myCustomElement text]
和[myCustomElement setText:@"whatever"]
)一樣,所以我覺得我應該定義一個屬性,但是,如果有的話,它有什么用?
我的getter和setter方法將如下所示:
- (NSString *)text {
return self.textLabel.text;
}
- (void)setText:(NSString *)text {
self.textLabel.text = text;
}
您可以這樣做,但我不鼓勵您這樣做。 要擁有看起來像標准訪問器方法(getter和setter)但實際上正在更新UI控件的方法,將來只會引起混亂。 這僅在方法執行不符合常規慣例的功能時才會破壞代碼的可讀性。 另外,您已經為textLabel
提供了一個屬性,因此這些方法不會給您帶來多少好處。
順便說一句,標准的自動生成的訪問器方法還提供了其他有用的功能(根據您在定義屬性時指定的限定符進行必要的內存管理,為將來可能需要此功能的某個日期啟用鍵值觀察 ,等),因此除非您是這些概念的專家,否則我將不願使用您自己的方法來替換它們。
如果您要執行的操作與標准訪問器方法不同,則建議使用將來不太可能引起混亂的方法名稱。
text已經是yourCustomElement屬性textLabel的一個屬性(稱為text )(這就是為什么您使用點表示法yourCustomElement.textLabel.text對其進行訪問的原因)
在此示例中,text屬性的getter / setter方法應該/只能在textLabel類中
這兩種方法只是設置/獲取屬性屬性的便捷方法(很好,但是它們不是獲取/設置方法,因此不應看起來)
我認為對於您的特定示例,最好不定義屬性。
屬性(據我所知)提供了方便的速記方式,可確保在引擎蓋下適當地保留/釋放(如果適用)。
http://useyourloaf.com/blog/2011/02/08/understanding-your-objective-c-self.html
如果將其聲明為屬性,並覆蓋getter / setter,則可以使用點表示法更改或檢索值。
例如:
myCustomElement.text = @"whatever";
long storry short:@synthesis生成getter和setter。 因此,使用綜合功能可以節省您的鍵入時間。
但是,您的代碼與@synthesis textLabel
因為您的代碼僅允許更改標簽文本。 @synthesis將允許更改所有屬性。
這是有關@synthesis / getters / setters的一些有用信息
http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.