如果我在类中定义属性
@interface Class
{
UIScrollView * _scrollView;
}
@property (nonatomic, retain) IBOutlet UIScrollView * scrollView;
@end
@implement
@synthesize scrollView = _scrollView;
@end
当我想实现它时,我可以使用
_scrollView.contentSize = xxx
或
self.scrollView.contentSize = xxx
两种描述有什么区别?
感谢您的回答...
答案 0 :(得分:2)
对实例变量的直接引用恰恰是 - 对实例中字段的引用,不受它也是属性的“后备存储”这一事实的影响。
另一方面,self.propName
引用是[self propName]
(如果阅读)或[self setPropName:newPropValue]
(如果设置)的简写。即,这些引用通过访问器方法。如果属性定义为assign
,则这不是真正重要,但如果它是retain
,那么setter方法将处理所有保留逻辑。
此外,您可以实现自己的属性访问器 - -(SomeType*) propName {...}
和-(void) setPropName:(SomeType*)propParm {...}
- 如果您想让它们执行一些特殊操作,例如“延迟”初始化。
(此外,属性默认为“公共”访问,而实例变量默认为“私有”访问。)