gpt4 book ai didi

objective-c - 传入自定义选择器实现

转载 作者:行者123 更新时间:2023-12-04 05:37:26 25 4
gpt4 key购买 nike

假设我有两个 Objective-c 类,LBFooLBBar .

LBFoo我有一个看起来像这样的方法:

- (void)doSomethingWithFoo:(NSNumber*)anArgument
{
if(anArgument.intValue > 2)
[LBBar doSomethingWithLBBar];
else
[LBBar doSomethingElseWithLBBar];
}

我想做的是将一个实现传递给 LBBar这并没有提前宣布。 (就像在 LBBar 中动态覆盖现有的 @selector 一样)

我知道一个 IMP类型存在,是否可以传递 IMP到一个类以更改其选择器实现。

最佳答案

您可以使用 method_setImplementation(Method method, IMP imp)函数在 objective-c runtime .

如果你想设置一个实例方法,它会像这样工作

method_setImplementation(class_getInstanceMethod([yourClass class], @selector(yourMethod)), yourIMP);

如果你想要一个类方法,只需使用 class_getClassMethod而不是 class_getInstanceMethod .参数应该是一样的。

这就是全部。请注意,IMP 只是一个空函数指针,前 2 个参数是 id selfSEL _cmd

关于objective-c - 传入自定义选择器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746545/

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