日々精進

新しく学んだことを書き留めていきます

objectAtIndexとforとコンパイラ警告

下記のようにループを回して配列を処理するというのはよくあるケースだと思う。

for(int i = 0;i < count;i++){
  Model *m = [ary objectAtIndex:i];
}

が、これだとコンパイラ警告が出る。理由はobjectAtIndex:(NSUInteger)indexなので、intとNSUIntegerで型が違うため。
コンパイラ警告を消そうとしてintをNSUIntegerにすると以下の場合で不具合が出る。

for(NSUInteger i = count - 1;i >= 0;i--){
  Model *m = [ary objectAtIndex:i];
}

配列に逆順でアクセスしていくと、最後にiが-1になってループから抜けるはずが、NSUIntegerだと2^32-1になってしまうので無限ループになる。
ループ変数はすべてintにしてコンパイラ警告は無視するのがいいのかな。。