2012-02-23 26 views
0

我對某事感到困惑。所以,我理解做這樣的事情@synthesize someProp = _someProp在子類中做什麼

self.someProp = someObject; 

的內存管理部分但是當你聲明的東西作爲

@synthesize someProp = _someProp; 

和您嘗試訪問_someProp在對象的子類,我得到一個錯誤sayint那_someProp尚未宣佈。但是如果我做self.someProp,我不會得到錯誤。有人可以解釋這些情況下的差異嗎?謝謝。

回答

3

它基本上創建下列代碼:

@implementation myClass 
{ 
    @private 
    id _someProp; // notice it's a private implementation property 
} 

-(id) someProp 
{ 
    return _someProp; 
} 

-(void) setSomeProp:(id) prop 
{ 
    [_someProp release]; 
    _someProp = [prop retain]; 
} 

@end 

的私有實現屬性意味着它不能在類的外部訪問,而不是接口的一部分,但執行的一部分。

+0

如果在接口中有_someProp聲明的ivar,那麼它可以直接用於子類,因爲它現在是接口的一部分了嗎? Thx – 2012-02-23 21:11:29

+0

@JW是的,假設您沒有將iVar聲明爲私有。 – 2012-02-23 22:18:35

1

@synthesize someProp = _someProp;在您的班級中創建getter和setter方法。這些方法被命名爲somePropsetSomeProp。這些方法獲取並設置一個名爲_someProp的私有變量,這就是爲什麼該名稱不適用於您的子類。

相關問題