4

私はここSOでいくつかの質問を見ましたisEqual:が、標準の代わりに関数を含む回答があります==

これまでのところ、私はを使用することを学んだだけ==なので、何を使用するのが良いのか、それぞれの長所と短所は何ですか?いつ使うべきですか?

ありがとうございました。

4

2 に答える 2

9

彼らは異なることをします。したがって、適切なものを使用する必要があります。

次のことを検討してください。

NSString *a = @"Hello!";
NSString *b = a;
NSString *c = [a mutableCopy];

if (a == b) NSLog(@"This prints");
if (b == c) NSLog(@"This doesn't");
if ([a isEqual:c]) NSLog(@"This does");

言い換えると; ==2つのポインタが同じ場所を指しているかどうか、つまり同じオブジェクトであるかどうかを確認するだけです。isEqual:2つのオブジェクトが等しいかどうかをチェックします。この場合a、とbは同じ文字c列ですが、はと等しい新しい文字列でaあり、同じ文字が同じ順序で含まれています。しかし、それは異なるクラスと異なるアドレスを持っています。

ほとんどの場合、オブジェクトに使用する必要があります。オブジェクトがある場合は、同じクラス(たとえば)isEqual:の場合は、より具体的なコンパレータを使用します。isEqualToString:

==一方、おそらく整数データ型にのみ使用する必要があります。(オブジェクトにはほとんど意味がなく、浮動小数点数にはあまり意味がありません。)

于 2010-09-18T10:23:54.243 に答える
1

isEqualは、レシーバーオブジェクト用に記述されたメソッドに従ってオブジェクトを比較します

==オブジェクトのアドレス(またはintなどのC型変数の値)を比較します

これは、たとえばNSStrings ==がアドレスを比較するが、isEquals:は文字列オブジェクトの値を調べるため、strcmpと同様のことを行うことを意味します。

多くの文字列は、データが同じである場合にアドレスが同じになるようにインターンされているため、テストケースで==が機能しているように見えることに注意してください。

于 2010-09-18T10:24:26.500 に答える