1

のAppleガイドは次のようにisEqual述べています。

受信者と指定されたオブジェクトが等しいかどうかを示すブール値を返します。(必要)

このメソッドは、インスタンスが等しいことの意味を定義します。たとえば、コンテナオブジェクトは、対応するオブジェクトがすべてisEqual:リクエストに対してYESと応答する場合、2つのコンテナを等しいと定義する場合があります。このメソッドの使用例については、NSData、NSDictionary、NSArray、およびNSStringクラスの仕様を参照してください。

2つのオブジェクトが等しい場合、それらは同じハッシュ値を持っている必要があります。この最後の点は、サブクラスで:を定義isEqualし、そのサブクラスのインスタンスをコレクションに入れる場合に特に重要です。サブクラスでもハッシュを定義していることを確認してください。

だから私の質問は、を使用して2つのUIButtonまたは2つのUILabel(2つのUIView)を比較するかどうかです。isEqual事前に、それらのクラスが同じクラスであるかどうかを確認してから、を呼び出しisEqualます。何が確認されますか?プロパティ、値、アクションメッセージ、ターゲットオブジェクトがチェックされていますか?

ありがとう

4

2 に答える 2

0

いいえ、isEqualはポインタのメモリアドレスを簡単にチェックして、ポインタが同じオブジェクトであるかどうかを確認します。同じボタンのタイトルが同じであるが、2つの別々のボタンインスタンスであるかどうかを確認するには、他の方法を使用する必要があります。

于 2012-06-07T17:26:32.460 に答える
0

NSObjectのisEqual:メソッドは、2つのオブジェクトのハッシュが等しいかどうかをチェックします。実際には、ハッシュは、オーバーライドされていない場合のインスタンスのアドレスです。ただし、単純なデータコンテナクラスでは、isEqualがオーバーライドされます。たとえば、NSStringのisEqual:メソッドは、比較対象のオブジェクトがNSStringインスタンスであることを確認した後、isEqualToString:を呼び出します。前に述べたように、NSData、NSNumber、NSDate、NSArray、およびNSDictionaryにも同じことが当てはまります。ただし、UIView(およびそのすべての親)はisEqualをオーバーライドしません。2つのビューが等しいと見なされるかどうかを判断する明確な方法がないためです。調査するビューの別のより重要なプロパティを比較することをお勧めします。

于 2012-06-07T17:50:50.483 に答える