在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];
    

    谢谢

    最佳答案

    使用 propertyname 只是访问实例变量。您负责对其内容进行自己的内存管理;不会为您执行任何保留或释放。

    使用 self.propertyname 通常使用访问器。如果您使用 @synthesize ,则生成的访问器将按照您的 @property 行中指定的方式处理内存管理(您给出的示例使用 retain ,因此将在为 self.propertyname 设置新值时执行保留)。您还可以编写自己的访问器方法,根据需要进行管理。

    Memory Management Programming Guide 中有更完整的解释。这种情况下的最佳实践通常是使用 @property@synthesize 来处理你的变量,然后使用 self.propertyname 访问器来减少你自己的内存管理负担。该指南还建议您避免实现自定义访问器(即使用 @property 而不使用 @synthesize )。

    关于iphone - 在objective-c中通过 "propertyname"和 "self.propertyname"访问属性的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5251600/

    10-13 04:01