2012-09-27 163 views
1

請你打破我的困惑。實例屬性的概念

如果我在一個類中定義一個屬性

@interface Class 
{ 
    UIScrollView * _scrollView; 
} 
@property (nonatomic, retain) IBOutlet UIScrollView * scrollView; 
@end 

@implement 
@synthesize scrollView = _scrollView; 
@end 

當我想實現它,我可以使用

_scrollView.contentSize = xxx 

self.scrollView.contentSize = xxx 

什麼是兩個描述之間的區別?


感謝您的回答...

+0

是否啓用ARC與否? –

+0

熱舔的答案是正確的。您可能也對這個答案感興趣,以幫助澄清事情。 http://stackoverflow.com/a/8032148/470879 – MattyG

回答

2

的直接引用實例變量恰恰是 - 在實例字段的引用,由一個事實,即它也是「後備存儲不受影響「的財產。

另一方面,self.propName參考是對[self propName](如果有讀數)或[self setPropName:newPropValue](如果設置)的簡寫。也就是說,這些引用通過訪問器方法。如果屬性定義爲assign,這並不重要,但如果它是retain,那麼setter方法會處理所有保留邏輯。另外,你可以實現你自己的屬性訪問器 - -(SomeType*) propName {...}-(void) setPropName:(SomeType*)propParm {...} - 如果你想讓它們做一些特殊的事情,比如「惰性」初始化。

(另外,以「公共」訪問,同時爲「私人」的訪問。屬性默認實例變量默認)