はまったのでメモ
int nonNegative = MAX(0, [array count] - someInt)
みたいなのを書いて、値が負にならないことを保証しようとしたが、この書き方は誤り。
0が普通の int
であるのに対して、 [array count]
は NSUInteger
を返すらしい。
[array count] - someInt
はunsigned int
なので負の数を表現出来ない。-1とかをunsigned intとして解釈すると、とても大きい数となってしまうので、結局上の式は想定外の動作をする。
ちなみに
if (0 < [array count] - someInt)
と書いた場合はちゃんとコンパイラが違う型同士の比較だという警告を出してくれる。