我在MyClass中有一个C函数,可以从该类内部调用它。是否可以将MyClass的实例C函数作为消息发送?
现在,要完全解释
MyClass *obj = [[MyClass alloc] init];
[obj myCFunction];
给出编译器错误:“实例消息的接收器类型'MyClass'未声明具有选择器'myCFunction'的方法。”。myCFunction是在MyClass.h@接口中声明的,完整的代码在MyClass.m中的@implementation之前,如果从MyClass.m的@implementation中调用,则可以正常工作。因此,C函数是私有的吗?我是否可以将其公开,以便将其作为消息发送到MyClass的实例?
我试图编写单元测试来测试某些计算的每个阶段,因此简单地创建一个目标c方法来调用c函数似乎不是一个有效的解决方案。
任何帮助都将不胜感激
最佳答案
不。发送消息是一个Objective-C结构,因此必须为对象(或类)定义一个方法才能发送消息。您有两个选择:编写一个调用C函数的实例方法,或者将它应该使用的对象传递给C函数。
如果在头文件中声明了C函数,则它对包含该头文件的所有文件都是公共的。因此,您可以从测试代码中调用它,如果您引用的是.m文件中声明的数据,它只是不知道您引用的是什么对象。您应该通过向C函数传递对该对象的引用来明确您在C函数中引用的对象。在类实现中,用myCFunction(self)
调用C函数。然后通过这个引用访问对象的任何数据,而不是直接访问本地声明的变量。