假设我正在开发一个调整应用程序,我想创建一个类的实例,其标题无法导入,但我知道类名,类方法和实例方法如何在类方法中使用参数创建它? 用类方法
说这个名为MMClass的类Array
(
[0] => Array
(
[0] => stdClass Object
(
[class] => button-input btn btn-warning
[name] => gorilla-preview
[value] => Goat
[id] => gorilla-preview
)
)
)
我正在做的事情如下:
+(instancetype)do:(NSString*)string for:(NSString *)antherString;
这是对的吗?
答案 0 :(得分:0)
首先,我不确定我是否说明了这一点,但为什么不用你想要使用的声明创建自己的标题并导入它(或者只是在内部声明内联声明)如果你只想在一个文件中使用它,你的文件)?并正常调用方法?而不是经历所有这些混乱?所有编译器都关心的是它会看到你想要调用的方法的声明。
使用函数指针调用实际方法实现时,需要将其强制转换为与方法签名对应的正确类型的函数指针:
Class class = objc_getClass("MMClass");
Method initMethod = class_getClassMethod(class, @selector(do:for:));
IMP imp = method_getImplementation(initMethod);
id (*foo)(Class, SEL, NSString *, NSString *) =
(id (*)(Class, SEL, NSString *, NSString *))imp;
id instance = foo(class, @selector(do:for:), @"do", @"ye");
但是获得一个你只会使用一次的IMP是愚蠢的。相反,您应该将objc_msgSend
转换为所需的函数指针类型,并直接调用它:
Class class = objc_getClass("MMClass");
id (*foo)(Class, SEL, NSString *, NSString *) =
(id (*)(Class, SEL, NSString *, NSString *))objc_msgSend;
id instance = foo(class, @selector(do:for:), @"do", @"ye");