2010-02-05 26 views
4

鑑於下面的屬性聲明,方法(A)的工作方式與方法(B)完全相同嗎?我只想檢查self.yellowViewController = yellcon_New;是否會通過我的setter,以便舊對象得到釋放,並保留新對象。設置一個屬性與點或括號語法有區別嗎?

// INTERFACE 
@property(nonatomic, retain) YellowViewController *yellowViewController; 

// IMPLEMENTATION (A) 
self.yellowViewController = yellcon_New; 

// IMPLEMENTATION (B) 
[self setYellowViewController:yellcon_New]; 

回答

5

所有這一切都是正確的:

self.yellowViewController = yellcon_New; 

而且

[self setYellowViewController:yellcon_New]; 

工作一樣。 我想補充一些有趣的事情:當您使用

yellowViewController = yellcon_New; 

你直接關聯的值的伊娃,沒有經過您的二傳手梅索德去。

所以,如果你有

-(void)setYellowViewController:(YellowViewController*)theYellowViewController; 
{ 
    NSLog(@"Setting the yellow view controller"); 
    [yourWife askFor:beer]; 
    ...whatever... 
    ...set the yellowViewController (retain in your case) 
} 

調用

self.yellowViewController = yellcon_New; 

[self setYellowViewController:yellcon_New]; 

將使用setter方法(和日誌信息,並讓你的妻子爲你帶來一些啤酒)

但是

yellowViewController = yellcon_New; 

不會。

在某些情況下知道這一點很有意思。

4

是,A線和B線工作一樣

您可以檢查通過使用@dynamic代替@合成的該物業,並把NSLog的消息在您執行setter方法。

+3

不需要@dynamic。如果實現setter方法,編譯器將不會生成setter。 – bbum 2010-02-05 16:11:36

+0

...這很重要,因爲如果您需要自定義setter,則可以使用它繼續生成getter,反之亦然。爲了進行調試,可以快速地將日誌記錄添加到其中一個訪問器中,而不必更改太多的代碼。 – andyvn22 2010-02-06 15:02:16

1

是的。如果您使用該物業的@synthesize事物,它會爲您創建一個-setYellowViewController:方法。

相關問題