Objective c 更好地使用UIColor

Objective c 更好地使用UIColor,objective-c,memory,Objective C,Memory,我有一个简单的问题: 出于任何原因,什么更好?每次设置时使用[UIColor somecolor],或者创建属性/ivar并在viewDidLoad中设置它,然后在Controller中的任何地方使用它 @property (nonatomic, strong) UIColor *someColor; someColor = [UIColor redColor]; view1.color = someColor; view2.color = someColor; ... 为什么? 为UICo

我有一个简单的问题: 出于任何原因,什么更好?每次设置时使用
[UIColor somecolor]
,或者创建属性/ivar并在viewDidLoad中设置它,然后在Controller中的任何地方使用它

@property (nonatomic, strong) UIColor *someColor;
someColor = [UIColor redColor];

view1.color = someColor;
view2.color = someColor;
...
为什么?


为UIColor创建属性太耗时,我认为对于这样一个小对象来说没有必要。有没有一种不用创建属性就可以快速解决此问题的方法?

您通常应该更喜欢使用具有指向对象的指针的属性,这可以提高应用程序对大对象的性能,而不是调用方法来访问它。在这种情况下,UIColor不是一个大对象,因此您没有太大的好处

无论如何,当你有一个对象在一个类中多次使用时,你应该为它设置一个属性。

带有“someColor”模式的便利方法在每次调用它们时都会分配内存。这比只分配一次内存并将其分配给属性(即指向已分配内存部分的变量)的效率要低

一般来说,取消引用比分配要便宜得多

编辑:因为@Mats提到的内容:从头开始,因为便利方法返回单例,所以没有区别。

最好的方法是:

- (void) changeColor:(UIColor *)color 
{
    view1.backgroundColor = color;
    view2.backgroundColor = color;
    view3.backgroundColor = color;
}
或者可以说:

[@[view1, view2, view3] makeObjectsPerformSelector:@selector(setBackgroundColor:) withObject:[UIColor redColor]];

这样,当调用方法时,只需实例化一次对象,并且不需要将其存储在属性中,因为每个视图都已存储该对象。如果您将来想更改它,只需再次调用该方法,而如果您有一个属性,根据OOP定律,更改该属性不会更改视图的颜色…

不,它们不会。他们返回单身家庭。尝试
NSLog(@“%p%p”,[UIColor redColor],[UIColor redColor])。我不知道。谢谢你指出这一点。我编辑了我的原始答案。@Mats如果它是一个单独的问题,比没有其他问题,你的评论是最好的。请发布一个完整的答案,我会检查它。它不是一个单例,它是一个类变量,我想它是惰性创建的。苹果公司费心这么做的事实就是你的答案。最好的。