仅使用目标c / xcode中的属性为控件或实例变量创建实例变量是否更好?
如果要创建属性,最好将其设置为原子或非原子(对于控件)。
例如,执行以下操作的最佳做法是什么:
@interface blah
{
UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
OR
@interface blah
{
IBOutlet UILabel *label;
}
OR
@interface blah
{
UILabel *label;
}
@property (retain) IBOutlet UILabel *label;
然后当我dealloc最好的时候:
[self.label release]
或 [标签发布]
编辑:
总结一下......
答案 0 :(得分:1)
我不会为标签创建属性,因为它不需要在UIViewController之外访问,因此我会使用第二种情况。关于原子性的事情 - 逻辑规定,由于UI应该只从主线程更新,UILabel也应该只在主线程中访问。因此,如果您声明属性nonatomic
或atomic
几乎无关紧要,您只能从主线程访问和更改UILabel
var。
性能方面,nonatomic
属性也更快,因为访问不需要获取锁定。
答案 1 :(得分:1)
如果您正在使用界面构建器,则声明
IBOutlet UILabel *label;
警告IB,有一个可以链接的标签。这允许您使用指针label
修改您在IB中创建的标签。但是,如果标签永远不需要修改,则根本不需要声明它或引用它。只需在IB中创建它并保留它。在这种情况下,不需要getter或setter方法,因此根本不需要使用@property
或@synthesize
。
如果您是以编程方式完全创建和配置标签,则无需将其声明为IBOutlet
。只需使用
UILabel *label;
然后在代码中根据需要调整label
。国际文凭组织不需要知道它存在。然后在需要时创建getter和setter方法。
答案 2 :(得分:1)
您希望避免在dealloc方法中使用方法调用。您可能遇到一个条件,即getter访问另一个可能已经发布的实例变量。只释放实例变量更安全。
[label release];
如果您决定通过访问者发布,请使用以下内容(如fichek所述):
self.label = nil;