Iphone 通过“访问”访问属性之间的区别;“propertyname”;对;“self.propertyname”;在objective-c中?
在objective-c中,通过“propertyname”访问属性与通过“self.propertyname”访问属性之间有什么区别?你能在回答中包括:Iphone 通过“访问”访问属性之间的区别;“propertyname”;对;“self.propertyname”;在objective-c中?,iphone,objective-c,memory-management,properties,accessor,Iphone,Objective C,Memory Management,Properties,Accessor,在objective-c中,通过“propertyname”访问属性与通过“self.propertyname”访问属性之间有什么区别?你能在回答中包括: 什么是最佳实践 这两种方法如何影响内存管理(保留计数/内存管理责任) 还有其他优点/缺点吗 该场景的假设可基于以下内容: 头文件 实施 谢谢使用propertyname只访问实例变量。您负责对其内容进行自己的内存管理;不会为您执行任何保留或释放操作 使用self.propertyname通常使用访问器。如果您使用的是@synthesis,生成
谢谢使用
propertyname
只访问实例变量。您负责对其内容进行自己的内存管理;不会为您执行任何保留或释放操作
使用self.propertyname
通常使用访问器。如果您使用的是@synthesis
,生成的访问器将按照@property
行中的指定处理内存管理(您给出的示例使用retain
,因此将新值设置为self.propertyname
时将执行retain)。您还可以编写自己的访问器方法来进行管理
更全面的解释在报告中。这种情况下的最佳实践通常是使用
@property
和@synthesis
来处理变量,然后使用self.propertyname
访问器来减轻自己的内存管理负担。该指南还建议您避免实现自定义访问器(即使用@property
而不使用@synthetic
)。另一个注意事项-它对iPhone没有多大用处,因为Cocoa Touch中没有绑定。但如果您使用的是可可粉,请注意以下几点:
键值编码。KVC是整个Cocoa中使用的一种协议,尤其是在绑定中。它将首先为您的密钥寻找访问器,并且仅作为最后手段直接访问数据。您可以通过实现访问器来缩短KVC的搜索,从而加快数据访问
还要注意,如果您以var=value的形式直接设置实例变量,键值观察不会注意到更改,绑定对象也不会获得新值。我通常将实例变量命名为
\u propertyname
,因此如果我不小心忽略了self,编译器会抱怨。
。这也是我采用的做法-它有助于更清楚地将实例与属性区分开来。哦,因此,如果我目前只使用propertyname,那么我需要特别添加一个retain-else变量,否则会丢失变量吗?但是,最佳实践是使用访问器吗?(有趣的是,这更详细)@Anomie/@Tim-你在这里到底是什么意思?所以在头文件的接口部分调用变量“UIFont*ifont”?但是在@property行中,如何获得“uiFont”属性以与“\u uiFont”变量对齐?@Greg:在synthesis指令中匹配它们:@synthesis uiFont=\u uiFont代码>这实际上在iOS开发中也是相关的,因为那里的对象确实支持KVC和KVO,尽管有点简略。谢谢你指出!
@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];