【问题标题】:Sandbox Swift code in a controlled environement, error safe受控环境中的沙盒 Swift 代码,错误安全
【发布时间】:2017-10-09 10:18:12
【问题描述】:

在为 iOS 开发 Swift library 时,您是否会将该库沙箱化,这样该库中的错误就不会在宿主应用程序中重现? (= 未捕获的错误不会导致应用崩溃)

这里有一些线索并不能完美地涵盖所有内容:

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

disered 行为可以与 Android 相比,在 Android 中您可以拥有一个线程并在其上拥有一个 Thread.UncaughtExceptionHandler,因此这里出现的所有问题都会被捕获。

由于语言的设计,除了尝试/捕获所有内容之外可能没有合适的解决方案(请参阅here)。

【问题讨论】:

    标签: ios swift multithreading


    【解决方案1】:

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

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

    最糟糕的事情:

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

    崩溃或将throws 用于可能失败的方法、返回nil 或在回调中返回Error 对象都很好。

    【讨论】:

    • 感谢您的回答,因此您尝试/捕获并将错误传递给主机应用程序是个好主意吗?
    • 是的,最好让宿主应用有机会适当地响应任何错误(重试、显示错误消息等)。
    猜你喜欢
    • 2017-03-13
    • 2020-04-07
    • 2013-04-15
    • 2018-01-24
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多