2012-01-03 18 views
1

我在MyClass的C函數,並可以從類內部調用它。是否可以發送MyClass的C實例作爲消息?發送一個目標C實例的C函數

要完全解釋,此刻

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

給人的編譯器錯誤:「接收器類型‘MyClass的’例如消息不具有選擇‘myCFunction’聲明的方法」。 myCFunction是MyClass.h @interface中聲明和完整的代碼在MyClass.m @implementation之前,如果從MyClass.m的@implementation中調用工作正常。因此,C函數是否是私有的,我可以公開它,以便將它作爲消息發送給MyClass的實例?

我想要編寫單元測試,其測試一些計算於是乾脆創建一個目標C的方法來調用C函數似乎並不像一個有效的解決方案的每個階段。

任何幫助將不勝感激

+1

你不能* *發送一個C函數的對象 - 例如,他們收到的郵件* *。 – 2012-01-03 13:28:22

回答

0

沒有。發送消息是一個Objective-C結構,因此您必須爲對象(或類)定義一個方法來發送消息。您有兩種選擇:編寫一個調用C函數的實例方法,或者將它應該使用的對象傳遞給C函數。

如果C函數在你的頭部聲明文件,它是公衆對包含該頭文件中的所有文件。因此,您可以從測試代碼中調用它,如果您引用.m文件中聲明的數據,它只是不知道您指的是哪個對象。您應該通過向C函數傳遞對該對象的引用來明確指出您要引用的對象。在類實現中,將使用myCFunction(self)調用C函數。然後通過此引用訪問任何對象的數據,而不是直接訪問本地聲明的變量。

+0

謝謝,我也動了我的C代碼到一個單獨的cMethods.c文件有,我不能以其他方式解決一些鏈接錯誤。但myCFunction(自我)的想法完美,謝謝。 – 2012-01-10 16:08:52