ios - Sandbox Swift 代码在受控环境中,错误安全

标签 ios swift multithreading

在为 iOS 开发 Swift 时,您是否会将库沙盒化,这样库中的错误就不会在主机应用程序中重现? (= Uncaught Error 不会使应用程序崩溃)

这里有一些线索,但并未完美涵盖所有内容:

  • 使用 NSSetUncaughtExceptionHandler:只捕获 Obj-c 异常 (NSException)
  • 使用带有 try/catch 和闭包的后台队列,例如 here .

可以将 disered 行为与 Android 进行比较,在 Android 中,您可以拥有一个线程并在其上拥有一个 Thread.UncaughtExceptionHandler,因此此处出现的所有错误都会被捕获。

由于语言的设计(参见 here),除了 try/catch everything 之外可能没有合适的解决方案。

最佳答案

通常,在 iOS 中,您会在不再安全继续的情况下抛出异常。例如,如果主机应用程序将错误的初始化数据传递给您的库,您应该崩溃,因为它是继续运行的未定义行为。

事实证明,崩溃只是您能做的第三糟糕的事情,因此您应该这样做,而不是两件更糟糕的事情中的任何一件。

最糟糕的事情:

  1. 损坏的用户数据
  2. 难以诊断问题(未定义的行为、不一致的行为等)
  3. 崩溃

要么崩溃,要么对可能失败的方法使用 throws,返回 nil,或者返回一个 Error 对象回调。

关于ios - Sandbox Swift 代码在受控环境中,错误安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46644096/

相关文章:

ios - iOS 8 中的 NSThread detachNewThreadSelector

IOS Firebase 后台获取

WPF:从后台线程更新 UI 的问题

ios - 来自带有 Storyboard 的 UIViewController 子类的子类不起作用,除非

java - RMI java中的竞争条件 - 2个客户端1个服务器

multithreading - pthread_cond_signal 不会立即解锁 pthread_cond_wait 线程

ios - 在 Swift 中释放对象

ios - UIView 内的 UITableView - 仅当在 uitableview 外滚动单元格时才加载数据

ios - 使用 Swift 4 隐藏和显示 UIBarButtonItem

带有自定义单元格的 Ios/swift/UISearchController 或 SearchDisplayController