得到iphone窗口背景颜色

Jon*_*an. 0 iphone objective-c

我一直在关注iTunes U上的斯坦福大学iphone视频.看到老师试图做类似这段代码的事情,但他意识到并说它没有用,虽然我没理解:

- (IBAction)flashPressed{
if (window.backgroundColor == [UIColor magentaColor]){

 window.backgroundColor = [UIColor redColor];
}else {
 window.backgroundColor = [UIColor magentaColor];
}
}
Run Code Online (Sandbox Code Playgroud)

Objective-C,基于Windows的应用程序.不确定你还需要知道什么.

Fel*_*xyz 5

它不工作的原因是UIViewbackgroundColor是一个copy性质.它的声明如下:

@property(nonatomic, copy) UIColor *backgroundColor;
Run Code Online (Sandbox Code Playgroud)

这意味着当您获得的颜色对象[UIColor redColor]被设置backgroundColor为时,将复制整个对象,并且将保留的副本位于UIViewUIColor类对象保留的内存地址不同的内存地址上.

==检查指针是否相同,这意味着只有当两个指针指向同一个对象时它才会成功.这是你有时想做的事情.例如:

if ([aView superView] == self)
   [aView removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

在这里,你要确保aView超级视图实际上是这个对象,而不仅仅是根据某些标准"相同"的对象.

但是当你比较两个字符串时,你(几乎总是)对它们是否包含相同的字符感兴趣,并且它们是否在不同的内存地址上并不重要.因此你使用:

if ([aString isEqualToString:anotherString])   // faster than isEqual:
Run Code Online (Sandbox Code Playgroud)

在我们的颜色示例中,它是相同的:我们想知道这两个对象是否都代表红色,而不是两个指针是否指向完全相同的对象.

如果backgroundColor声明属性是retain您可以使用的==,并且它会工作直到UIColor由于某种原因重新分配其redColor对象.这不太可能发生,但是要强调的是,对象代表了一种独特的东西,像字符串和颜色这样的对象通常copied不是"保留".只能有一种颜色为红色,并且只能有一个包含"Hello world!"字符的字符串.因此,最终归结为一种形而上学的论证.