random or arc4random

如果在你的程序中,要使用到随机数,可能第一反应就是使用random()。但是在今天我看了一段代码之后,里面用到的是arc4random()而不是random()。所以就查了一下到底两个之间有什么区别。

不查不知道,一查才了解到,原来在随机数生成的选择上还是挺有讲究的。除了上面的arc4random() 和 random()之外,还有经常用到的rand().

它们之间的区别,用Google找到了一些信息。可以参考下面的内容:
http://stackoverflow.com/questions/2794201/whats-the-difference-between-arc4random-and-random
http://stackoverflow.com/questions/328950/c-the-definitive-truth-about-rand-random-and-arc4random
http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html

其中的大体意思都是说arc4random()是产生随机数的首选方案,因为random()产生的是一个可预测的伪随机数,不适合用于安全要求高的情况下。而arc4random()是一个不太可预测的伪随机数,在用到安全性有要求的情况下,arc4random()要优于random()。而如果没有安全性要求的话,random()也是一个不错的选择。在上面提供的参考连接中还提到,rand()是标准C的一部分,而random()是POSIX的一部分,而arc4random()是只有BSD系统才提供的。所以在你要产生随机数的时候,一定要考虑好到底能不能用,和使用的环境是什么。在iPhone开发中,首推arc4random()来生成随机数。