当Int溢出导致IOS应用程序崩溃时,我该如何评论它

我的应用程序必须使用int来做一些倍数,很容易遇到两个相当大的数字的乘法。

当然,它会崩溃。 我怎么能说一些布尔价值。 就像每次我们退出应用程序之前,我们将数据saveDataAppDelegate.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