首页 > 解决方案 > 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

解决方案


值得考虑它们究竟有何不同。

表现

Objective-C 方法调用与 C 函数调用的额外步骤包括:

  1. 传递“隐藏”参数:实例/类作为第一个参数,选择器名称作为第二个参数。
  2. 可选地遍历类层次结构以找到实际具有实现的类层次结构
  3. 在选择器缓存中查找相关的IMP.

所有这一切都需要时间,因此 C 函数调用总是会稍微快一点。一个可能很重要的领域的例子是音频处理。

非平凡的逆向工程

选择器名称是 Objective-c 方法的功能的赠品,因此分析 C 函数的功能有点困难。您也有更大的灵活性来进一步隐藏调用(在诉诸 asm 之前)。

无法调酒

挂钩 C 函数非常困难,但替换/挂钩目标方法的实现却很容易。现在确实存在非动态直接objective-c 方法来对抗(__attribute__((objc_direct)))但那是最近的objc 语言演变。

C 函数的特殊用例

除了明显的main入口点之外,其他示例包括:
- 信号处理程序- 在标记为 的 C 函数
之前+ (void)initialize;和为 C 函数执行的代码 - 需要超精确时序的线程操作main__attribute__((constructor))


推荐阅读