实例属性的概念

时间:2012-09-27 02:16:53

标签: objective-c ios cocoa-touch

请你打破我的困惑。

如果我在类中定义属性

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

@implement
@synthesize scrollView = _scrollView;
@end

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

_scrollView.contentSize = xxx

self.scrollView.contentSize = xxx

两种描述有什么区别?


感谢您的回答...

1 个答案:

答案 0 :(得分:2)

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

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

此外,您可以实现自己的属性访问器 - -(SomeType*) propName {...}-(void) setPropName:(SomeType*)propParm {...} - 如果您想让它们执行一些特殊操作,例如“延迟”初始化。

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