gpt4 book ai didi

ios - 使用 -fobjc-arc-exceptions 编译的文件中的快速枚举异常安全吗?

转载 作者:行者123 更新时间:2023-12-03 16:50:37 25 4
gpt4 key购买 nike

我正在考虑在我正在编写的库中使用异常进行内部错误处理。如果使用它们,则将在启用 arc 和 f-objc-arc-exceptions 的情况下构建库。

obj-c 异常的一个问题是必须注意不要抛出任何您不知道异常安全的代码。当使用-fobjc-arc-exceptions编译文件时,编译器异常添加的枚举代码安全吗?

据我所知,应该是这样,因为我看不出有任何理由让它做任何需要清理的事情。但如果这种行为被记录在某处,我会更高兴使用它。

编辑:我应该澄清一下,当我说“使用异常进行内部错误处理”时,我指的是非 fatal error 。所以这里的“异常安全”意味着不应该出现内存泄漏、不存在未释放的锁等情况。

最佳答案

不要将异常用于内部错误处理

最多,您最终会得到与系统代码具有不同设计和感觉的代码。两者之间的边界始终需要维护和考虑,因为它添加了“我在异常行为栅栏的哪一边?”

实际上,这将是一场维护噩梦。每次重构代码时(可能是为了利用系统中的新功能),您都必须不断地维护两种异常处理之间的边界。

更糟糕的是,软件更新会更改实现细节,您的应用程序将开始崩溃。

这些库被设计为不使用可恢复错误的异常。如果您想最大限度地降低代码的拥有成本,您的代码应该遵循相同的模式。

系统上有几个库在内部使用异常来处理可恢复的错误。它们是错误和维护难题的持续来源。

<小时/>

回答您的具体问题,不,这永远不安全:

@try {
for ( id x in array ) { ... do something that might @throw ... }
} @finally {
...
}

当您@throw脱离快速枚举时,您正在抛出Apple代码框架,并且该行为被记录为未定义。在实践中,这样一个简单的模式可能会工作得很好,但“巧合工作”会产生巨大的维护成本。

关于ios - 使用 -fobjc-arc-exceptions 编译的文件中的快速枚举异常安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com