视图对象/状态行为的属性

时间:2015-10-28 03:13:37

标签: ios objective-c pointers uiview uicolor

当我尝试将“主题”类设置为一个基本上作为我的整个应用程序颜色的主题/样式表的单例时,我最近遇到了一些关于视图的行为。为每个视图分配了作为主题对象属性的颜色。所以我会设置一个视图的颜色,如:someDetailView.backgroundColor = [Theme SharedTheme].detailViewsBackgroundColor],并且我的所有代码的backgroundColor属性引用内存中的这个单个对象,然后我可以简单地更改该对象的属性,应用程序的外观将反映该更改。但是,这些变化并未反映出来。这个事实可以简化为这个代码:

   UIColor *someUIColorObject = [UIColor redColor];
   self.view.backgroundColor = someUIColorObject;

   someUIColorObject= [UIColor yellowColor];

其中,根据我最初的假设,self.view会显示为黄色,但它显示为红色。我对OOP,引用类型和指针的理解一般是,如果某些东西指向一个值并且您更新该值,那么指向指针的任何内容都应该看到新值。显然,其他一些因素正在消除这一理论。也许一些与绘图或运行循环有关的视图相关行为,或者可能在引擎盖下查看.backgroundColor在设置它时会生成uicolor对象的副本。

无论如何,这让我好奇,至少可能是一个很好的学习机会。

1 个答案:

答案 0 :(得分:2)

你是关于指针的,但在这种情况下还有另一个问题。如果您查看documentationbackgroundColor属性的定义,您会看到它被定义为:

@property(nonatomic, copy) UIColor *backgroundColor

copy做的是它实际上复制颜色并将其存储在backgroundColor属性中。

因此,它不是指向您指定的原始指针,而是创建一个新实例并指向该新实例。

相关问题