Ios 在objective-C中调用C函数消息传递样式

Ios 在objective-C中调用C函数消息传递样式,ios,objective-c,runtime,objective-c-runtime,Ios,Objective C,Runtime,Objective C Runtime,如果我有: 测试c int test_func(){ } 我想做: test.m [self test_func] 应如何针对test.c文件设置我的.h文件。 我在这里看到过这样一个问题的答案,但我没有将其添加到书签中,也无法找到它。它涉及一个带有extern命令的.h文件。任何帮助都将不胜感激。可以以特殊方式声明test\u func,并使用各种Objective-C运行时API函数将该方法实现“附加”到类的方法列表中,但最简单的方法是: testfunc.h te

如果我有:

测试c

int test_func(){


        }
我想做:

test.m

[self test_func]
应如何针对
test.c
文件设置我的
.h
文件。
我在这里看到过这样一个问题的答案,但我没有将其添加到书签中,也无法找到它。它涉及一个带有
extern
命令的
.h
文件。任何帮助都将不胜感激。

可以以特殊方式声明
test\u func
,并使用各种Objective-C运行时API函数将该方法实现“附加”到类的方法列表中,但最简单的方法是:

testfunc.h
testfunc.c
TestClass.h
如果您仍然希望尝试在运行时添加方法,请查看以下链接:


  • 值得注意的是,对于像调用C函数这样的琐事,为了可维护性和可读性,您应该避免动态方法注入/解析。除非你有一个在你的问题中没有解释的别有用心的动机,否则坚持计划A(简单路线)

    如果没有一些严重的偷工减料,你就无法做到这一点;除非您采取简单的方法,只需将
    test\u func
    作为调用
    test\u func()
    函数的实例方法。这正是它应该如何实现的……在某些特殊情况下,
    test\u func()
    可以以这样的方式定义(以及一些用于设置它的objc运行时调用),但你需要解释你要解决的问题。一般解决方案如@dreamlax所示。
    #ifndef TESTFUNC_H
    #define TESTFUNC_H
    
    int test_func();
    
    #endif
    
    #include "testfunc.h"
    
    int test_func()
    {
        return 4;
    }
    
    #import <Foundation/Foundation.h>
    
    @interface TestClass : NSObject
    - (int) test_func;
    @end
    
    #import "TestClass.h"
    #import "testfunc.h"
    
    @implementation TestClass
    
    - (int) test_func
    {
        return test_func();
    }
    
    @end