gpt4 book ai didi

objective-c - 什么是alt handler,说说Objective-C运行时系统异常处理?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:23 29 4
gpt4 key购买 nike

查看 Objective-C 运行时系统源代码,尤其是在 objc-exception.mm 处文件中,我找到了表达式“alt handler”和处理 alt 处理程序的函数。我不知道它是什么,但根据文件注释,如果运行时库是在没有 alt 处理程序支持的情况下编译的,那么只有 zerocost 实现,我也不知道它是什么。

那么,当我们谈论 Objective-C 运行时库时,什么是 alt 处理程序以及什么是零成本异常处理?

最佳答案

Objective-C 运行时库允许开发人员在系统第二次展开堆栈时指定要为每个堆栈帧调用的函数,在清理阶段,在它找到刚刚抛出的 catch 子句之后异常。

因此,对于熟悉 Unwind 库和 ObjC 异常处理系统的人来说,当为当前堆栈帧的 Unwind Context 调用 Objective-C 个性例程 (__objc_personality_v0) 时, ObjC 系统检查是否有该上下文的 alt 处理程序。如果找到 alt 处理程序,则首先调用它。此后,由于 ObjC 异常处理机制使用 C++ ABI 展开堆栈,cxx 个性函数 (__gxx_personality_v0) 被调用。然而,只有在清理阶段而不是搜索阶段调用 objc 个性例程时才会这样做。因此,如果没有为当前异常找到 catch 子句,则不会调用 alt 处理程序(如果有的话)。

关于零成本部分,cxx个性函数使用零成本异常处理。因此,如果运行时库在没有 alt 处理程序支持的情况下编译,则只有零成本实现,因为 __gxx_personality_v0 无论如何都会被调用。

Objective-C 库公共(public) API 提供了两个函数来为特定的 Unwind 上下文添加和删除 alt 处理程序:分别是 objc_addExceptionHandlerobjc_removeExceptionHandler

关于objective-c - 什么是alt handler,说说Objective-C运行时系统异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578025/

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