Objective c 替换Objy-C基础函数实现 是否有一种方法替换ObjuleC基础函数的实现,例如NScaseFaskScript函数?我当然知道,但它似乎只适用于类方法,而不适用于一般函数。

Objective c 替换Objy-C基础函数实现 是否有一种方法替换ObjuleC基础函数的实现,例如NScaseFaskScript函数?我当然知道,但它似乎只适用于类方法,而不适用于一般函数。,objective-c,Objective C,这些函数只是C函数和/或宏(Objective C构建于C之上),不能替换C函数 但是,您可以使用定义来屏蔽名称: Class MyNSClassFromString( NSString* blah ) { return whatever; } #define NSClassFromString MyNSClassFromString 从那时起,调用NSClassFromString(@“hi”)将调用自定义函数。注意:这有几个限制:它不会更改定义上方的任何代码(或您正在使用的库中的

这些函数只是C函数和/或宏(Objective C构建于C之上),不能替换C函数

但是,您可以使用
定义
来屏蔽名称:

Class MyNSClassFromString( NSString* blah ) {
    return whatever;
}

#define NSClassFromString MyNSClassFromString
从那时起,调用
NSClassFromString(@“hi”)
将调用自定义函数。注意:这有几个限制:它不会更改
定义
上方的任何代码(或您正在使用的库中的任何代码),它通常会使intellisense不满意,并且如果首先将
NSClassFromString
定义为宏,它将不起作用(在这种情况下,您可以在define之前添加
#undef NSClassFromString


一般来说,我不建议这样做,但如果你真的想这样做,可能性是存在的。

可能相关:实际上不相关。但我认为是相关的?你可以使用
dyld
加载包含我相信的库函数的替代实现的库。如果你想变得更复杂,请尝试
man dyld
,您可能可以动态找到原始实现的函数指针,以便跟踪/引导调用它。我想,如果您处于完全黑客模式,您可以使用机器指令覆盖已安装的系统函数,以跳转到要替换的函数的实现。您还需要复制替换的函数根据其他地方的指令,修复其跳转等,并在替换函数运行之前/之后调用该副本…但这听起来很复杂。(尽管开发一个实现这样的修补的库可能很酷,例如。)您确实可以替换函数;它是调用或插入的。@JoshCaswell很好,但正如我对nielsbot所说的,这只适用于函数未内联的情况,这可能会导致在Apple更新API实现时难以维护某些代码。如果函数最初是宏,它也不适用,Apple称之为这些功能可以是。