2010-12-15 47 views
0

我會定義一些輔助函數,並且我更喜歡用C代替Objective-C編寫它們。在Objective-C中使用C的定義

這是在Objective C項目中添加頭文件和實現C文件的「最佳實踐」?

如果我需要在我的函數中使用Objective-c定義,我需要在頭文件C文件(UIKit?)中包含什麼?

例如:我想爲NSString創建NSLog的快捷方式,我可以在我的C文件中創建類似於此代碼的東西嗎? :

void MYLog (NSString *string){ 
    NSLog(@"%@",string); 
} 
+0

爲什麼要爲'的NSLog()'接單'NSString'時,它已經採取一個字符串,** ** optionaly多個參數的捷徑嗎? – PeyloW 2010-12-15 12:47:40

+0

每當我想*我會在這裏創建一個C API *,我已經後悔了......一個Objective-C版本沒有那麼多的工作,很少會招致大量的開銷與直C並且相當通用。 – bbum 2010-12-15 16:32:15

+0

ehm ... Peylow你是對的完全沒用......假設這是一個例子來幫助我制定問題:P -.- – MatterGoal 2010-12-23 20:58:55

回答

2

是確保你可以在你的C代碼(反之亦然),如果你的源文件編譯爲C/OBJ-C代碼(已.M擴展名或類型手動設置在Xcode中使用Objective-C的功能)

爲了使核心功能起作用,我認爲應該輸入<Foundation/Foundation.h><UIKit/UIKit.h>就足夠了。這些頭文件可能已經被導入到你的預編譯頭文件(* .pch文件)中,所以你甚至可能不需要導入它們。

如果您想擴展一些UIKit類功能,請考慮實現自定義類類別,而不是使用普通c函數。

+0

然後把你的C代碼放在.m文件中,所以像'@「foo 「'被編譯器理解 – JeremyP 2010-12-15 10:37:06

+0

是的,好點,我會更新答案 – Vladimir 2010-12-15 11:11:47

0

你可以很容易地做到這一點。您不必導入任何內容,因爲您已經使用前綴標頭導入了UIKitFoundation。該記錄器功能應該是這樣的:

// Logger.h 
void MyLog(NSString *str); 

// Logger.m 
#import "Logger.h" 
void MyLog(NSString *str) {…} 
+0

謝謝zoul,在你看來,我可以使用.c擴展名還是需要使用.m? – MatterGoal 2010-12-15 12:37:55

+0

您應該使用'.m',以便編譯器能夠理解這些文件中的Objective-C。 – zoul 2010-12-15 12:45:13