当Int溢出导致IOS应用程序崩溃时,我该如何评论它
我的应用程序必须使用int
来做一些倍数,很容易遇到两个相当大的数字的乘法。
当然,它会崩溃。 我怎么能说一些布尔价值。 就像每次我们退出应用程序之前,我们将数据saveData
在AppDelegate.swift
的函数中:
func applicationWillTerminate(application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. }
如果整数算术运算(+, – ,*,/,…)的结果溢出,则应用程序立即终止。 没有办法来抓住这种情况或得到通知,例如保存数据。 没有可以捕获的Swift错误或NSException
。 对于其他运行时错误(例如访问有效边界之外的数组元素)或解包可选项( nil
也会发生同样的情况。
这意味着您必须事先检查整数算术运算是否可以执行。 或者 – 根据您的需要,您可以使用“溢出运算符” &+
, &-
和&*
来代替触发错误的结果,类似于(Objective-)C中的结果。
你应该更喜欢NSInteger
超过Int
。
当你不知道你的代码可能运行在什么样的处理器架构上时,使用NSInteger
,所以你可能出于某种原因需要尽可能大的inttypes,在32
位系统上它只是一个int,而在64
位系统上它是很long
。
坚持使用NSInteger
而不是int / long,除非你特别需要它们。
NSInteger/NSUInteger
被定义为这些types之一的*dynamic typedef *s
,并且它们是这样定义的:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif