2010-12-15 46 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