0

たとえば、一連のオブジェクトNSArrayを含む があるとします。NSString

NSArray *games = [NSArray arrayWithObjects:@"Space Invaders", @"Dig Dug", @"Galaga", nil];

これを行うことの長所と短所は何ですか:

for (id object in games) {
    NSLog(@"The name of the game is: %@", object);
    NSLog(@"The name is %d characters long.", [object length]);
    // Do some other stuff...
}

対:

for (NSString *name in games) {
    NSLog(@"The name of the game is: %@", name);
    NSLog(@"The name is %d characters long.", [name length]);
    // Do some other stuff...
}
4

2 に答える 2

0

厳密には必要ではなく、反復ごとに指定された型へのキャストが強制されるため、ループ内に固有のメソッドを呼び出さない限りNSString、これが有益な理由はわかりません。

したがって、あなたの場合は、すべてのオブジェクトで-length(メソッド) を呼び出しているため、私はそれを行います。NSStringコンパイラの警告を回避するために、オブジェクトを特定の型にキャストします。これは、非型NSFastEnumerationを指定したときに行われます。idええ、2番目の例を使用してください。

于 2011-01-22T20:13:26.103 に答える
0

idクラス固有のメッセージを既に渡しているかのように、型を指定してイテレータをユニバーサルにすることはできません。「ほぼ」ユニバーサルにしたい場合は、使用する予定のすべてのメッセージを持つ階層の最上位のクラスを反復子の型として指定できます。あなたの場合、このクラスは NSString です

于 2011-01-22T20:18:26.863 に答える