[英]Objective-c coding
我對使用禮儀感到困惑。 如果我宣布這個
@property(非原子,強)NSString * aString;
這有什么區別
1. @ synthesize aString = _aString
和
2. @ synthesize aString;
如果我想使用它,有什么區別:
3. anOtherString = aString;
和
4. anOtherString = self.aString;
和
5. anOtherString = _aString;
我知道_aString是ivar,但問題是1,2,3,4,5之間的組合。
例如,如果我使用2和4,我是否傳遞對其他字符串或其副本的引用? 我通常使用2和4是傳遞參考的最佳選擇?
當您使用@synthesize
聲明時,這會為您生成getters / setter。 當您使用@synthesize
聲明@synthesize aString = _aString
您正在使用它,以便您的getter / setter方法將使用setAString
和aString
。 您正在創建一個名為_aString
的私有變量。 這意味着在您的類中,您可以通過調用獲取此變量
NSString *tempString = _aString;
要么
NSString *tempString = self.aString;
后者使用生成的getter方法來檢索aString
。
您還可以使用以下方法設置變量:
_aString = @"";
要么
self.aString = @"";
后者使用生成的setter方法。 這非常重要,因為如果您已將屬性聲明為保留(現在很強)或復制,那么您的setter方法會執行一些您可能不知道的邏輯(請查看strong / copy / weak屬性)。 從本質上講,如果您擁有強大的屬性並且使用生成的setter,那么您的代碼會釋放它之前對該變量的引用,並為您分配給變量的內容創建一個強引用。
我個人嘗試總是使用getter / setter方法,除非它是一個弱引用(然后它真的沒關系)。 我通常也總是使用@synthesize aString = _aString
方法,因此如果我選擇的話,我可以命名方法參數aString
。 它有助於避免命名沖突。
如果我能以任何方式澄清,請告訴我。
你的答案在這里:
1.@synthesize aString = _aString
Ans:您的屬性名稱是aString但是您正在創建別名_aString。 現在您可以訪問aString,您的訪問者只能由_aString使用。 從Xcode4.4開始,此語句默認出現。
2.@synthesize aString;
Ans:這是Objective-c合成屬性的基本樣式。 從Xcode4.4開始,此語句將覆蓋上述語句。
3.anOtherString = aString;
您正通過引用變量/別名訪問該屬性。
4.anOtherString = self.aString;
您正在使用訪問器來獲取其價值。
5.anOtherString = _aString;
您正在訪問該物業。
I usually use 2 and 4 is that the best choice for passing a reference ?
答:這是一個很好的方式,就像自己一樣。 使您的課程符合KVC標准。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.