3

さまざまな理由から、配列のインデックスを他のものと揃えるために、配列[NSNull null]内に持っています。このような:

NSArray *arr = @[obj1, obj2, obj3, [NSNull null], obj4];

値を確実に無視するために配列を反復処理するときに使用を検討している方法が 2 つありますがnull、どちらが速いかはわかりません。

方法 1

for (id obj in arr) {

    if (![[NSNull null] isEqual:obj]) {

        //Do stiff
    }
}

方法 2

for (id obj in arr) {

    if ([obj isKindOfClass:[MyObject class]]) {

        //Do stiff
    }
}

私の質問は次のとおりです。この配列を繰り返し処理して、タイル表示されたスクロール ビューを適切に処理しているため (したがって、ユーザーがスクロールすると何度も実行され、できるだけ速く実行することが重要です)、これらの方法のどれがより高速ですか?

4

1 に答える 1

1

[NSNull null]はシングルトンなので、オブジェクト ポインタが同じかどうかを確認するのが最も簡単です。

本当に速くなりたい場合は、次のようにします。

for (id obj in arr) {
    if ([NSNull null]!=obj) {
        //Do stuff
    }
}  

ただし、非常に小さな違いについて話しているため、視覚的なインターフェイスに違いが見られる可能性はほとんどありません.

コメントで説明されているオプションは、[NSNull null]チェックを高速化するためにローカル変数を配置することですが、コンパイラがそれを行う可能性があるため、参照用にここに配置します。

NSObject *null_obj=[NSNull null];
for (id obj in arr) {
    if (null_obj!=obj) {
        //Do stuff
    }
}
于 2014-10-17T16:13:58.437 に答える