objective-c - What is the benefit of writing C function in Objective C?
问题描述
I am curious when and why we should write C function in Objective C code. I see some of the code where the C function could be replaced by a Objective C class level method.
I tried to google this but did not get much useful information. Please give me some simple examples where we should use a C function.
解决方案
值得考虑它们究竟有何不同。
表现
Objective-C 方法调用与 C 函数调用的额外步骤包括:
- 传递“隐藏”参数:实例/类作为第一个参数,选择器名称作为第二个参数。
- 可选地遍历类层次结构以找到实际具有实现的类层次结构
- 在选择器缓存中查找相关的
IMP
.
所有这一切都需要时间,因此 C 函数调用总是会稍微快一点。一个可能很重要的领域的例子是音频处理。
非平凡的逆向工程
选择器名称是 Objective-c 方法的功能的赠品,因此分析 C 函数的功能有点困难。您也有更大的灵活性来进一步隐藏调用(在诉诸 asm 之前)。
无法调酒
挂钩 C 函数非常困难,但替换/挂钩目标方法的实现却很容易。现在确实存在非动态直接objective-c 方法来对抗(__attribute__((objc_direct))
)但那是最近的objc 语言演变。
C 函数的特殊用例
除了明显的main
入口点之外,其他示例包括:
- 信号处理程序- 在标记为 的 C 函数
之前+ (void)initialize;
和为 C 函数执行的代码
- 需要超精确时序的线程操作main
__attribute__((constructor))
推荐阅读
- reactjs - 如何通过点击子标签获得“价值”?
- jquery - Wordpress Contact From7 默认选择当天
- html - 如何使用纯 CSS 为切换类上的边框设置动画?
- java - 无法使用 Maven 构建项目
- 3d - Onirix Targets 播放器应用程序中的 3D 模型质量不佳
- r - 仅时间转换(小时和分钟)
- c# - 从 WebClient 清除结果
- javascript - 如何从另一个 js 文件/函数中触发 mongoose post hook?
- excel - 使用 Excel 和 VBA 从 PowerPoint 文件生成 PDF 文件
- html - 如何用输入字段和按钮并排填充一行?