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

时间:2015-11-07 07:38:26

标签: ios swift

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

当然会崩溃。我怎么能说一些bool值。就像我们退出应用之前的每次一样,我们saveData的{​​{1}}功能AppDelegate.swift

func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

2 个答案:

答案 0 :(得分:2)

如果是整数算术运算的结果(+, - ,*,/,...) 溢出,应用程序立即终止。 没办法 抓住这种情况或获得通知,例如保存数据。 没有Swift错误或者NSException抛出你可以捕获的错误。 对于访问等其他运行时错误也会发生同样的情况 有效边界之外的数组元素,或解包 可选的nil

这意味着您必须事先检查是否为整数运算 可以执行操作。或者 - 根据您的需要 - 您可以使用“溢出运算符”&+&-&*代替, 哪个截断结果而不是触发错误, 类似于(目标 - )C。

答案 1 :(得分:0)

您应该更喜欢NSInteger而不是Int

当您不知道代码可能运行在哪种处理器体系结构时使用NSInteger,因此您可能出于某种原因需要尽可能大的int类型,32位系统上只有一个int,而在64位系统上,它是long

坚持使用NSInteger而不是int / long,除非你特别需要它们。

NSInteger/NSUInteger被定义为其中一种类型的*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