Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 视图对象/状态行为的属性_Ios_Objective C_Pointers_Uiview_Uicolor - Fatal编程技术网

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

Ios 视图对象/状态行为的属性,ios,objective-c,pointers,uiview,uicolor,Ios,Objective C,Pointers,Uiview,Uicolor,我最近遇到了一些关于视图的行为,当时我试图将一个“theme”类设置为一个单独的类,它基本上充当我整个应用程序的主题/样式表。每个视图都指定了作为主题对象属性的颜色。因此,我会设置一个视图的颜色,比如:someDetailView.backgroundColor=[Theme SharedTheme].detailViewsBackgroundColor],当我的所有代码的backgroundColor属性都引用内存中的单个对象时,我可以简单地更改该对象的属性,应用程序的外观就会反映出这种更改。

我最近遇到了一些关于视图的行为,当时我试图将一个“theme”类设置为一个单独的类,它基本上充当我整个应用程序的主题/样式表。每个视图都指定了作为主题对象属性的颜色。因此,我会设置一个视图的颜色,比如:
someDetailView.backgroundColor=[Theme SharedTheme].detailViewsBackgroundColor]
,当我的所有代码的backgroundColor属性都引用内存中的单个对象时,我可以简单地更改该对象的属性,应用程序的外观就会反映出这种更改。然而,这些变化并没有反映出来。这一事实可以归结为以下代码:

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

   someUIColorObject= [UIColor yellowColor];
其中,根据我最初的假设,self.view将显示为黄色,但它显示为红色。我对OOP、引用类型和指针的理解是,如果某个对象指向某个值,并且您更新了该值,那么任何指向该指针的对象都应该看到新值。显然,其他一些因素正在排除这一理论。可能是与绘图或运行循环有关的某些视图相关行为,或者可能是在hood view.backgroundColor下设置uicolor对象时复制该对象


不管怎么说,这引起了我的好奇心,至少是一个很好的学习机会

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

@property(nonatomic, copy) UIColor *backgroundColor
copy
实际上是复制颜色并将其存储在
backgroundColor
属性中


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

谢谢。这是我的候选理论之一,但我忘了查看头文件来验证它。在这种情况下,你知道一个明确的方法来回收我的主题单例类的概念吗?因此,通过更新应用程序的各种属性,应用程序的外观和感觉将大量更新?@AlexanderBollbach这是一个有趣的问题。在我的应用程序中,我通常依靠通知来更新颜色主题。您可以尝试在单例中创建一个数组,在其中存储使用块进行的所有分配。您必须将颜色指定移动到单独的函数,该函数将创建要执行的块。我不确定这是否有效,但是如果你存储了这些块,那么在你的主题改变之后,你可以重新执行它们。但是你需要小心,因为有些视图可能是零的,因为它们被释放了,所以你应该在你的块中检查它。你能解释一下用块存储赋值是什么意思吗?我在考虑创建对singleton中每个“style”元素的引用,然后创建一个方法来迭代引用,并对它们的背景颜色、边框宽度和属性进行赋值。。等这和你的意思相似吗?