swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?

swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?,第1张

概述func rand(max: Int?) -> Int { var index = Int(arc4random()) return max? != nil ? (index % max!) : index} 我在最后一行得到一个例外:EXC_BAD_INSTRUCTION 我猜这与iPhone 5S是64位同时5不是这样的事实有关,但我在上面的函数中没有看到任何处理64位的东西
func rand(max: Int?) -> Int {    var index = Int(arc4random())    return max? != nil ? (index % max!) : index}

我在最后一行得到一个例外:EXC_BAD_INSTRUCTION

我猜这与iPhone 5S是64位同时5不是这样的事实有关,但我在上面的函数中没有看到任何处理64位的东西?

编辑

我能够通过以下调整解决问题,但我仍无法解释原因.

func rand(max: Int?) -> Int {    var index = arc4random()    return max? != nil ? Int(index % UInt32(max!)) : Int(index)}
Int整数类型是iPhone 5上的32位整数和5S上的64位整数.由于arc4random()返回一个UInt32,它在iPhone 5上具有两倍于Int的正范围,因此你的第一个版本基本上有50%的机会在这一行崩溃
var index = Int(arc4random())

您的修改版本等待转换,直到您使用max的模数和,因此在那里转换为Int是安全的.您应该查看arc4random_uniform,它为您处理模数并避免当前实现中固有的偏差.

总结

以上是内存溢出为你收集整理的swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?全部内容,希望文章能够帮你解决swift – 为什么以下代码在iPhone 5上崩溃而在iPhone 5S上崩溃?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1036948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存