1

请你打破我的困惑。

如果我在一个类中定义一个属性

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

@implement
@synthesize scrollView = _scrollView;
@end

当我想实现它时,我可以使用

_scrollView.contentSize = xxx

或者

self.scrollView.contentSize = xxx

两种描述有什么区别?


谢谢你的回答...

4

1 回答 1

2

对实例变量的直接引用正是——对实例中字段的引用,不受它也是属性的“后备存储”这一事实的影响。

self.propName另一方面,参考是([self propName]如果阅读)或[self setPropName:newPropValue](如果设置)的简写。即,这些引用通过访问器方法。如果属性定义为 ,这并不重要assign,但如果是,retain那么 setter 方法会处理所有保留逻辑。

此外,您可以实现自己的属性访问器——-(SomeType*) propName {...}并且-(void) setPropName:(SomeType*)propParm {...}——如果你想让它们做一些特殊的事情,比如“惰性”初始化。

(此外,属性默认为“公共”访问,而实例变量默认为“私有”访问。)

于 2012-09-27T02:26:07.943 回答