NSString:isEqualとisEqualToString


94

違いは何であるisEqual:とはisEqualToString:

クラスが単にオーバーライドするのではなく、なぜisEqualTo *メソッド(NSArrayのisEqualToArray、NSDataのisEqualToDataなど)を追加するのisEqual:ですか?

回答:


103

isEqual:文字列をオブジェクトと比較しNO、オブジェクトが文字列でない場合に返します。ドキュメントに記載さisEqualToString:れているように、両方のオブジェクトが文字列であることがわかっている場合は、より高速です。

特別な考慮事項

両方のオブジェクトが文字列であることがわかっている場合、このメソッドはと同じかどうかを確認するよりも速い方法ですisEqual:

isEqualTo<Class>等しいかどうかの特定のチェックを提供するために使用されます。例えば; isEqualToArray:配列に等しい数のオブジェクトが含まれていること、および指定されたインデックスのオブジェクトYESisEqual:テストに返されることを確認します。


3
Aaron Hillegassを信じている場合は、パフォーマンスの違いはなく、わずかなタイプの安全です:blog.bignerdranch.com/334-isequal-vs-isequaltostring
Caro

2
リンクをありがとう-便利。Mark Dalrympleを信じるように私たちに求めています-私は
誰ですか


16

また、独自の-isEqual:および-isEqualTo<Class>:メソッドを作成する場合の規則は、nil引数を許可し、nil引数-isEqual:の例外を発生させることです。-isEqualTo<Class>:


1
私はこれに出会ったことがありませんでした。
マイクアブドラ

2
これはisEqualToStringには当てはまらないようで、nilを渡すとNOを返すだけです。
JakaJančar2009

9
興味深いことに、< ahref
Jonathan Dann

本当じゃない。isEqualToStringは例外を発生させません。
RespectTheCode

1
Cocoa Fundamentals GuideのWebページには、「このドキュメントは現在の開発のベストプラクティスを表していない可能性があります」と述べています。どうやら古いです。
cbh2000 2013

5

isEqualToString:渡されたものを型チェックする必要がないため、パフォーマンスがわずかに向上すると私は推測しています。


あなたの推測はおそらく本当でしょう:)
Philip007 2013年

5

@Abizernと@Jonathan Dannの両方の回答を拡張して、値isEqualisEqualToString処理しnilます。

- (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");
}

4

私はこれを強くお勧めます。isEqualToStringのパフォーマンス上の利点は、ほとんどのアプリケーションで基本的に無視できます。しかし、著者が言及している他の2つの違いがあります。

  • 型安全
  • 方法nilは扱われます

nilが2つによって処理される方法に違いはありません。受信者または引数、あるいはその両方になることはありません。
SayeedHussain 2014

「これ」が存在しなくなったものは何でも:/
Jared Grubb

1
@JaredGrubbに感謝します。新しいURLを見つけました。
ベンパッカード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.