2009-08-18 22 views
88

isEqual:isEqualToString:の違いは何ですか?NSString:isEqualとisEqualToStringの比較

なぜ、isEqual:をオーバーライドするのではなく、isEqualTo *メソッド(NSArrayの場合はisEqualToArray、NSDataの場合はisEqualToData)を追加するクラスはありますか?

答えて

95

isEqual:オブジェクトに文字列を比較し、場合NOを返します。オブジェクトは文字列ではありません。あなたは、両方のオブジェクトが文字列である知っていればisEqualToString:documentation状態として、高速である:

特別な考慮事項

あなたは、両方のオブジェクトが文字列である知っている、この方法はisEqual:よりも平等をチェックするためのより高速な方法です。

は、等価性の特定のチェックを行うために使用されます。例えば; isEqualToArray:は、配列に等しい数のオブジェクトが含まれていること、および指定されたインデックスのオブジェクトがテストの場合はYESを返すことを確認します。

+3

あなたはアーロン・ヒレガスが、その後何のパフォーマンスの差がないと考えられる場合に処理されます、ちょっとしたタイプのsafty:http://blog.bignerdranch.com/334-isequal-vs-isequaltostring/ – Caro

+2

リンクありがとう - 役に立つ。 Mark Dalrympleを信じるように私たちに依頼していますが、私は誰ですか? – Abizern

5

マイ推測は、それがisEqualToStringとして、わずかな性能向上を提供することである:型チェックするに渡されたものはありません

+0

あなたの推測はおそらく本当です:) – Philip007

14

また、あなた自身の-isEqual:-isEqualTo<Class>:メソッドを書くために、大会は-isEqual:の引数nilを許すと@Abizernと@ジョナサンダン答えに拡大-isEqualTo<Class>:

+1

あなたが知っているドキュメントは、これまでに見つけられませんでしたか? –

+1

これは、isEqualToStringの場合は当てはまりません.isEqualToStringは、nilを渡すとNOだけを返します。 –

+8

興味深いことに、Cocoa Fundamentals Guide

4

にnilを引数の例外を発生することで、両方のisEqualisEqualToStringnil値で動作します。

- (void)testStringEqual { 
    NSString *string = nil; 

    STAssertFalse([string isEqual:@"test"], @"NSString isEqual"); 
    STAssertFalse([string isEqualToString:@"test"], @"NSString isEqualToString"); 

    // Note that these both return NO 
    STAssertFalse([string isEqual:nil], @"NSString isEqual"); 
    STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString"); 

    string = @"test"; 

    STAssertTrue([string isEqual:@"test"], @"NSString isEqual"); 
    STAssertTrue([string isEqualToString:@"test"], @"NSString isEqualToString"); 

    STAssertFalse([string isEqual:nil], @"NSString isEqual"); 
    STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString"); 
} 
3

非常にお勧めしますthis。 isEqualToStringのパフォーマンス上の利点は、ほとんどのアプリケーションでは基本的に無視できます。しかし、他の二つの違いがあり、著者は述べて:

  • 型の安全性
  • 方法nil
+0

2人でnilを処理する方法に違いはありません。受信者または引数またはその両方である必要はありません。 – SayeedHussain

関連する問題