簡體   English   中英

Objective-c編碼

[英]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方法將使用setAStringaString 您正在創建一個名為_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM