私は次のC配列を持っていますNSString *
:
static NSString *const OrderByValueNames[] = {@"None",@"Added",@"Views",@"Rating",@"ABC",@"Meta"};
ここで、実行時にこの配列の長さを確認したいので、次のメソッドを作成しました。
NSInteger LengthOfArray(NSString *const array[])
{
NSInteger length = 0;
// For Loop Without a body!
for (length = 0; array[length] != nil; length++);
return length;
}
これで、構成時にこのコードを実行するdebug
と、すべてが正常になり、関数は正しい結果を返します。
しかし、構成に切り替えrelease
て再度実行すると、プログラムはforループでフリーズします。ループが実行されてから10秒後、iOSは応答しないためにアプリを強制終了します。変。
さて、ループにボディを追加すると、次のようになります。
for (length = 0; array[length] != nil; length++)
{
NSLog(@"%d",length);
}
その後、リリースモードでも正常に動作します。
次のように、ループに空の本体を指定します。
for (length = 0; array[length] != nil; length++){}
リリースモードでもフリーズします。
私の推測では、リリースモードで実行するとコンパイラが最適化されますが、正確には何ですか?!
何か案は?