它不起作用的原因是UIView
的backgroundColor
是copy
属性。它的声明如下:
@property(nonatomic, copy) UIColor *backgroundColor;
这意味着,当你从[UIColor redColor]
获取颜色对象设置为backgroundColor
,整个对象被复制,并通过UIView
保留副本将在不同的内存地址比UIColor
类对象保留的那个更大。
==
检查指针是否相同,这意味着只有当两个指针指向同一个对象时它才会成功。这是你有时想要做的。例如:
if ([aView superView] == self)
[aView removeFromSuperview];
在这里,你要确保aView
的超级观点实际上是这个非常对象,而不仅仅是一个是‘相同’根据一些标准。
但是,当你比较两个字符串时,你(几乎总是)对它们是否包含相同的字符感兴趣,并且它们是否在不同的存储器地址上并不重要。因此,你使用:
if ([aString isEqualToString:anotherString]) // faster than isEqual:
而且在我们与颜色的例子,这是相同的:我们想知道两个对象是否都代表红色,而不是是否两个指针指向完全相同的对象。
如果backgroundColor
财产被宣布为retain
,你也可以使用==
,并且它会一直工作到UIColor
出于某种原因重新分配其redColor
对象。这不太可能发生,但是要强调的是,对象表示一种独特的东西,像字符串和颜色的对象通常是copied
而非“已经存在”。只能有一种颜色为红色,并且只能有一个包含字符“Hello world!”的字符串。所以最终归结为一个形而上学的论证。
哪个讲座? – willc2 2010-03-07 22:16:34
数字4或5我认为 – 2010-03-08 07:53:41