2012-06-07 59 views
1

蘋果指南isEqual說:什麼是isEqual檢查?

返回一個布爾值,指示接收器和 給定對象是否相等。 (必需)

該方法定義意味着什麼情況下是相等的。例如,對於 示例,如果其對應的對象都對isEqual:請求迴應YES,則容器對象可能會將兩個容器定義爲相等。 請參閱NSData,NSDictionary,NSArray和NSString類 規範中使用此方法的示例。

如果兩個對象相等,它們必須具有相同的散列值。在 子類,並打算把該子類的實例爲 集合:如果你定義isEqual這 最後一點尤爲重要。確保你也在你的子類中定義了散列。

所以我的問題是,如果我想比較兩個UIButtons或使用isEqual 2個UILabels(二UIViews),並事先如果他們的類是同一類我檢查,然後調用isEqual,什麼是越來越檢查?屬性,值,動作消息,目標對象正在檢查?

感謝

+1

isEqual對於像視圖一樣複雜的東西可能不是正確的選項。你能說你究竟在做什麼,而不是你目前如何去做? – jrturton

+0

我想比較兩個視圖是否相同,所以我檢查所有的子視圖,並且一個一個地查看它們的屬性,例如如果有uibuttons和uilabels我想比較他們在這個視圖和其他視圖 –

回答

0

的isEqual:方法NSObject的的方法檢查兩個對象的散列是否相等。實際上,散列是實例的地址(如果未被覆蓋)。但是,在簡單數據容器類中,isEqual被重寫,例如,NSString的isEqual:方法調用isEqualToString:在檢查被比較的對象是NSString實例之後。正如我之前提到的,同樣適用於NSData,NSNumber,NSDate,NSArray和NSDictionary。但是,UIView(及其所有父母)不會重寫isEqual:因爲沒有明確的方式來決定兩個視圖是否相等。你最好比較另一個更重要的視圖屬性來檢查。

+0

不,'-isEqual:'方法不檢查'-hash'。首先,散列對於不相等的對象可以是相同的。 'NSObject'實現只是比較對象指針是否相等。也就是說,一個對象只等於它自己。 –

+0

@KenThomases'-isEqual:'肯定會檢查'-hash'(但不僅限於此)。這就是爲什麼蘋果在文檔中聲明,如果你選擇重寫'-isEqual:'你也必須重寫'hash'。 – Alladinian

+0

你必須重寫'-hash'以維持它們之間的關係(不同的哈希表示不等於,相等意味着相同的哈希),但這並不意味着'-isEqual:'檢查哈希。事實上,如果是這樣,那麼就不需要兩者都改變​​。只要改變一個就足夠了。 –

0

不,不的isEqual看到了指針的內存地址進行簡單的檢查,如果他們是同一個對象。你必須使用其他一些方法來檢查按鈕是否有相同的標題,但是是兩個單獨的按鈕實例。

+3

不完全。出於充分的原因,isEqual在容器類上被覆蓋。 – 2012-06-07 17:52:03

+0

沒錯,但他在UIbuttons和Uilabels的背景下詢問過它。 –