Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 通过“访问”访问属性之间的区别;“propertyname”;对;“self.propertyname”;在objective-c中?_Iphone_Objective C_Memory Management_Properties_Accessor - Fatal编程技术网

Iphone 通过“访问”访问属性之间的区别;“propertyname”;对;“self.propertyname”;在objective-c中?

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,生成

在objective-c中,通过“propertyname”访问属性与通过“self.propertyname”访问属性之间有什么区别?你能在回答中包括:

  • 什么是最佳实践
  • 这两种方法如何影响内存管理(保留计数/内存管理责任)
  • 还有其他优点/缺点吗
  • 该场景的假设可基于以下内容:

    头文件

    实施


    谢谢使用
    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];