在objective-c中通过“propertyname”与“self.propertyname”访问属性之间的内容是什么?你能否回答一下:
该方案的假设可以基于以下内容:
标头文件
@interface AppointmentListController : UITableViewController {
UIFont *uiFont;
}
@property (nonatomic, retain) UIFont *uiFont;
实施
- (void)viewDidLoad {
[super viewDidLoad];
uiFont = [UIFont systemFontOfSize:14.0];
//VERSUS
self.uiFont = [UIFont systemFontOfSize:14.0];
感谢
答案 0 :(得分:1)
使用propertyname
只需访问实例变量。你负责对其内容进行自己的内存管理;没有为您执行保留或释放。
使用self.propertyname
通常使用访问者。如果您使用的是@synthesize
,则生成的访问者将按照@property
行(您使用的示例retain
中的说明处理内存管理,因此在设置新内容时会执行保留值为self.propertyname
)。您也可以编写自己的访问者方法,根据需要进行管理。
更全面的解释是Memory Management Programming Guide。在这种情况下,最佳做法通常是使用@property
和@synthesize
来处理变量,然后使用self.propertyname
访问器来减轻自己的内存管理负担。该指南还建议您避免实施自定义访问者(即使用@property
而不使用@synthesize
)。
答案 1 :(得分:1)
另外一个注意事项 - 它对iPhone来说没那么有用,因为Cocoa Touch中没有绑定。但是如果您使用的是Cocoa,请注意以下几点:
键值编码。 KVC是整个Cocoa中使用的协议,最值得注意的是绑定。它将首先查找您的密钥的访问者,并且仅作为最后的手段直接访问数据。您可以通过实施访问器来缩短KVC的搜索速度,从而加快数据访问速度。
另请注意,如果直接设置实例变量,则以var = value的形式,Key-Value Observing将不会注意到更改,绑定对象将不会获得新值。