在 iOS 上,我试图使用method_invoke
Objective-C 运行时(参考)中的函数来调用一个声明为返回类型的 Objective-C 方法void
。
这在非 ARC 代码中运行良好,但启用 ARC 后,在调用objc_retain
. 我认为正在发生的事情是编译器注意到method_invoke
的返回类型id
,并尝试保留返回的值method_invoke
(注意这method_invoke
意味着返回它调用的方法的返回值)。
让编译器知道在这种特定情况下,返回值method_invoke
是垃圾并且不应该保留的正确方法是什么?以下似乎有效,但在概念上似乎是错误的:
(void)((__bridge void *)method_invoke(target, method));
这似乎不起作用(仍然崩溃objc_retain
:
(void)method_invoke(target, method)
这里有更正确的方法吗?