Objective c 控制最佳做法

Objective c 控制最佳做法,objective-c,properties,Objective C,Properties,最好只为控件创建实例变量,还是在objective c/xcode中创建具有属性的实例变量 如果要创建属性,最好将其设置为原子或非原子(对于控件) 例如,执行以下操作的最佳实践是什么: @interface blah { UILabel *label; } @property (nonatomic, retain) IBOutlet UILabel *label; 或 或 那么,当我解除锁定时,最好是: [self.label release] 或 [标签发布] 编辑: 总而言之 在代

最好只为控件创建实例变量,还是在objective c/xcode中创建具有属性的实例变量

如果要创建属性,最好将其设置为原子或非原子(对于控件)

例如,执行以下操作的最佳实践是什么:

@interface blah
{
  UILabel *label;
}

@property (nonatomic, retain) IBOutlet UILabel *label;

那么,当我解除锁定时,最好是:

[self.label release]
或 [标签发布]

编辑:

总而言之

  • 在代码中引用控件时,应使用实例变量
  • 在dealloc中,您可以通过[iVal release]释放控件\

  • 我不会为label创建属性,因为它不需要在UIViewController外部访问,因此我使用第二种情况。关于原子性的逻辑规定,由于UI应该只从主线程更新,所以UILabel也应该只在主线程中访问。因此,如果您声明属性
    非原子的
    原子的
    ,实际上并不重要,您只需要从主线程访问并更改
    UILabel
    var


    性能方面,
    非原子属性也更快,因为access不需要获取锁。

    如果您使用的是interface builder,则

    IBOutlet UILabel *label;
    
    提醒IB存在可链接的标签。这允许您使用指针
    标签
    修改在IB中创建的标签。但是,如果标签永远不需要修改,则根本不需要声明或引用它。只需在IB中创建它,并保持不变。在这种情况下,不需要getter或setter方法,因此根本不需要使用
    @property
    @synthesis

    如果完全以编程方式创建和配置标签,则无需将其声明为
    IBOutlet
    。只用

    UILabel *label;
    

    然后在代码中根据需要调整
    标签
    。IB不需要知道它的存在。然后,如果需要,创建getter和setter方法。

    您希望避免在dealloc方法中使用方法调用。您可能会遇到getter访问另一个可能已经发布的实例变量的情况。释放实例变量更安全

    [label release];
    
    如果您决定通过访问器发布,则使用以下命令(如fichek所述):


    谢谢那么关于dealloc…当我有一个属性时,我是做[self.propName release]还是[ival release]?我还假设对于一个ival,我总是需要在dealloc中释放并做[ival release],当你有一个属性时,我会将它设置为
    nil
    。AFAIK会自动进行
    发布
    ,但不确定。自从我通过实例变量管理属性以来,很久没有使用过属性了。@user472292记住符号self.propName是[self-propName]的缩写;也就是说,它只是一个方法调用,尽管是一个不可见的、自动生成的方法。最佳做法是不要在-dealloc方法中访问属性。
    UILabel *label;
    
    [label release];
    
    self.label = nil;