2013-01-02 51 views
0

我對使用禮儀感到非常困惑。 如果我聲明瞭這個Objective-c編碼

@property(nonatomic,strong)NSString * aString;

是什麼@合成ASTRING此

1之間的差值= _aString

2. @合成ASTRING;

如果我想使用它,之間有什麼區別:即_aString是伊娃

3. anOtherString = aString; 

4. anOtherString = self.aString; 

5. anOtherString = _aString; 

我知道,但問題在於1,2,3,4,5之間的組合。

例如,如果我使用2和4,我是傳遞給其他字符串或它的副本的引用? 我通常使用2和4是傳遞參考的最佳選擇?

回答

1

你的答案在這裏:

[email protected] aString = _aString 

答:您的屬性名稱是ASTRING但你正在一個別名_aString。現在你可以訪問aString,你的訪問器只能被_aString使用。從Xcode4.4開始,這個聲明默認出現。

[email protected] 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兼容。

1

當你使用你的@synthesize聲明時,這會爲你生成getters/setters。當您使用@synthesize聲明@synthesize aString = _aString時,您正在使其獲取/設置方法將使用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。它有助於避免命名衝突。

請讓我知道,如果我能以任何方式澄清。

+0

感謝您的回放,你說使用「@synthesize aString = _aString」創建一個私有變量,但'Anoop Vaidya'說吼叫,它只是一個別名? –

+0

我會對Anoop的術語表示支持。你引用的是同一個變量,所以在技術上它是一個別名。我說私有變量是因爲我想強調你只能在.m文件中使用它。 – groomsy

+0

@RedMak:groomsy沒錯! –