arc4randomとは?
srandで初期化を行わなくてもランダムの値をとれる
Objective-Cで使える便利メソッド
そんなarc4random使っててiphoneアプリを作ってる際に
嵌ったのでそのケースを紹介します。
なぜかマイナスの値が発生する
特定範囲のランダムな値が欲しかったので
randみたいな使い方をしてたらなぜかマイナスの値が入ってました。
// 期待する値は1〜10
// ただ時々マイナスになってしまう…
int random = ((int)arc4random()) % 10 + 1;
なんでや
arc4randomの戻り値を見るとu_int32_tなのでunsigned int
ん?unsigned int?
あ!
原因
unsigned intの値をintに変換してるから
arc4randomで2147483647以上の値が戻って来た際に
intにキャストしてるからマイナスが発生してたわけです。
まぁ、最初っから戻り値確認しとけよって話ですね。
どこかのブログとかで強制的にintに変換してるのを見かけることが
結構あるので、皆さん嵌らないように気をつけてください。