2012-09-27 125 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 {...} - 如果你想让它们做一些特殊的事情,比如“惰性”初始化。

(另外,以“公共”访问,同时为“私人”的访问。属性默认实例变量默认)