objective-c - 向 Objective C 实例发送 C 函数

标签 objective-c c methods

我在 MyClass 中有一个 C 函数,可以从该类内部调用它。是否可以将 C 函数的 MyClass 实例作为消息发送?

现在要充分说明

MyClass *obj = [[MyClass alloc] init];
[obj myCFunction];

给出编译器错误:“实例消息的接收者类型‘MyClass’未声明带有选择器‘myCFunction’的方法”。 myCFunction 在 MyClass.h @interface 中声明,完整代码在 MyClass.m 中的@implementation 之前,如果从 MyClass.m 的@implementation 中调用,则可以正常工作。因此 C 函数是私有(private)的,我可以将其公开以便我可以将其作为消息发送到 MyClass 的实例吗?

我正在尝试编写单元测试来测试某些计算的每个阶段,因此简单地创建一个 objective-c 方法来调用 c 函数似乎不是一个有效的解决方案。

任何帮助将不胜感激

最佳答案

没有。发送消息是一种 Objective-C 构造,因此您必须为对象(或类)定义一个方法来发送消息。您有两个选择:编写一个调用 C 函数的实例方法,或者将它应该使用的对象传递给 C 函数。

如果在您的头文件中声明了 C 函数,那么它对于包含该头文件的所有文件都是公共(public)的。因此,您可以从测试代码中调用它,如果您引用的是 .m 文件中声明的数据,它只是不知道您指的是什么对象。您应该通过向 C 函数传递对该对象的引用来明确您在 C 函数中引用的对象。在类实现中,将使用 myCFunction(self) 调用 C 函数。然后通过这个引用访问对象的任何数据,而不是直接访问本地声明的变量。

关于objective-c - 向 Objective C 实例发送 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712970/

相关文章:

python - List 方法删除列表中的最后一个元素以及所有元素

c - 阻塞线程直到系统时钟发生第二次变化

c - 为什么 ntimes 不在子进程中添加一个?

JavaScript:在方法中使用对象变量

C++成员函数调用

c - GNU Make - 对非程序代码的依赖

ios - 来自另一个 UIViewController Nib 内的 Nib 的自定义 UIView - IBOutlets 为零

iphone - 如何在没有实例化对象的情况下调用方法

iphone - 用手指拖动按钮

objective-c - 如何向 UIScrollView 添加 View 并使其与 UIPageControl 保持同步?