2014-03-13 75 views
0

兩個類似的問題定製或重寫訪問財產

問題1:我叫mySetter一個定製的setter :,是stockName仍持有較強的指針?

@property (nonatomic, strong, setter = mySetter:) NSString *stockName; 
- (void)mySetter:(NSString *)name { 
    _stockName = name; 
} 

問題2:我已經覆蓋默認setter,stockName是否仍然保持強指針呢?

@property (nonatomic, strong) NSString *stockName; 
- (void)setStockName:(NSString *)stockName { 
    _stockName = stockName; 
} 

感謝您對 「用Objective-C編程」 的回覆

+0

**是**。這兩者都是相同的,你只是將別名命名爲其他名稱。 –

+0

第二種情況如何覆蓋默認的setter? 'stockName'的默認設置將是'setStockName:'。 'mySetter:',在這種情況下,只是一個你需要調用的方法。 – Amar

+0

對不起,編寫錯誤的代碼,我會編輯 – tom19830924

回答

0

Encapsulating Data

注意:編譯器會自動在它的所有情況綜合實例變量 也合成至少一個訪問器或方法。如果爲讀寫 屬性或只讀屬性的getter實現了getter和setter,則編譯器將 假定您正在控制屬性實現 ,並且不會自動合成實例變量。

既然你沒有實現吸氣,可變_stockName實例合成。 爲此,如果您爲設置者使用默認名稱或自定義名稱,則無關緊要。

,並宣佈該屬性爲「強」意味着對於 相關的實例變量__strong所有權,看到"4.1.1. Property declarations" 的「鐺/ ARC」文檔。

0

如果您使用的是ARC並且您指定了strong訪問說明符,則屬性將包含強引用。 ARC將進行保留/釋放。在non arc覆蓋訪問器方法不是這樣的。你應該處理retain/release。通過setter = mySetter:你只是爲訪問器方法分配一個別名。這對實施沒有任何影響。兩種方法都是一樣的。還有一件事mySetter:不會爲stockName這將是setStockName

0

stockName將舉行strong指針您提供的propertystrong所有權的制定者。所以在這兩種情況下你都會得到一個strong指針參考。

但你問你可以使用stockName作爲問題的iVarsetter方法和getter方法爲

問題1

iVar = stockName

getter = [self stockName]self.stockName

setter[self mySetter:] =

問題2

iVar = stockName

getter = [self stockName]self.stockName

setter = self.stockName =[self setStockName:]