它不起作用的原因是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