web-dev-qa-db-ja.com

Objective-Cのforループ

どこでforループを使用し、どこでfor inループを使用する必要がありますか?

それらの違いを知りたいです。

50
suman

Objective-Cの従来のforループは標準Cから継承され、次の形式を取ります。

for (/* Instantiate local variables*/ ; /* Condition to keep looping. */ ; /* End of loop expressions */)
{
    // Do something.
}

たとえば、1〜10の数字を出力するには、forループを使用できます。

for (int i = 1; i <= 10; i++)
{
    NSLog(@"%d", i);
}

一方、for inループはObjective-C 2.0で導入され、NSArrayインスタンスなどのコレクション内のオブジェクトをループするために使用されます。たとえば、NSArray内のNSStringオブジェクトのコレクションをループしてすべて出力するには、次の形式を使用できます。

for (NSString* currentString in myArrayOfStrings)
{
    NSLog(@"%@", currentString);
}

これは、次の従来のforループと論理的に同等です。

for (int i = 0; i < [myArrayOfStrings count]; i++)
{
    NSLog(@"%@", [myArrayOfStrings objectAtIndex:i]);
}

For inループを使用する利点は、まず、見た目がずっときれいなコードであることです。次に、Objective-Cコンパイラーはfor inループを最適化できるため、従来のforループで同じことを行うよりもコードが高速に実行されます。

お役に立てれば。

116
James Bedford

高速列挙を意味しますか?あなたの質問は非常に不明瞭です。

通常のforループは次のようになります。

unsigned int i, cnt = [someArray count];
for(i = 0; i < cnt; i++)
{ 
   // do loop stuff
   id someObject = [someArray objectAtIndex:i];
}

そして、コンパイラーによって最適化される高速列挙のループは次のようになります。

for(id someObject in someArray)
{
   // do stuff with object
}

高速列挙で使用している配列は変更できないため、高速列挙を使用する場合は削除も追加もできないことに注意してください

8