我注意到一些Objective-C项目中一些使用大量C函数的文件,将代码存储在.c
文件中而不是.m
。我知道.m
是针对Objective-C的,而.c
是针对C的,但在使用.c
时可以使用.m
吗?是否有性能增加或并发症的好处? GCC或clang会在每个代码中编译相同的代码吗?.c文件而不是.m文件?
回答
主要好处是.c文件可以在正常的C程序中按原样使用,并且您知道它们不会意外地合并使它们不兼容的Objective-C构造。
是的,Xcode会用'C'编译器编译.c文件,用'Objective-C'编译器编译.m文件。这是相同的编译器二进制文件,只是使用不同的语言选项。既然如此,我不希望相对的表现会太差。
所以你不会指望他们之间有太大的区别? – 2010-12-20 02:45:16
我不希望有太大的区别。 – ldav1s 2010-12-20 23:01:13
除此之外,.c对跨平台开发非常有用。将它从一个平台移植到另一个平台的开销非常低或几乎可以忽略不计。 。大多数情况下,应用程序的后端或模型是使用“C”开发的,其中性能是必需的,您需要与机器直接交互。比如与硬件和东西的交互。
我不问C代码,当我询问大部分项目是否为objective-c时,不会将C代码放在.m文件中。 – 2013-08-04 17:14:46
- 1. “创建NSManagedObject子类”创建.h和.m而不是.swift文件
- 2. 如何让Xcode首先打开.h而不是.m文件?
- 3. C++ wstring文件,而不是字符串
- 4. C:包括源文件,而不是头
- 5. 从.m文件
- 6. Project.properties文件而不是default.properties文件
- 7. asp.net c#浏览到文件夹,而不是文件
- 8. .m文件中的C函数比.c文件中的慢吗?
- 9. 导入.m文件
- 10. 写入.m文件
- 11. 删除文件的文件夹,而不是文件夹
- 12. 目标c - .m和.a文件?
- 13. 为什么在Mailcore2示例'MCOMessageView'文件是一个C++文件而不是目标c文件?
- 14. MATLAB .m文件到mex文件转换
- 15. 在.m文件中构造头文件?
- 16. 如何将m文件转换为c文件
- 17. MATLAB:从另一个M文件调用M文件
- 18. 文件是一个目录而不是文件
- 19. File.Copy目标文件是一个目录,而不是文件。
- 20. 找不到.m文件进行的UITableViewController
- 21. IOS CS193p - 为什么IBAction连接拖到.m文件而不是.h?
- 22. 如何在C#文件中使用XML而不是使用外部XML文件?
- 23. 合并.h和.m文件
- 24. .m文件到字符串
- 25. matlab的GUI与M文件
- 26. 从Python运行m文件
- 27. .m文件情节自动
- 28. Visual C++ 10 - 不断尝试构建项目而不是文件?
- 29. 如何让maven查找war文件而不是jar文件?
- 30. mkdirs创建文件而不是创建文件夹[JAVA]
所以你会期望两个编译之间有很大的区别? – 2010-12-20 04:01:49
@Justin Meiners:不,我不会。我从来没有注意到或听说编译为Objective-C或C99之间有很大的区别。 AFAIK,GCC和Clang中的Objective-C编译器以与普通C程序相同的方式编译Objective-C程序的纯C部分。请注意,对于Objective-C++来说,情况并非如此 - 针对该编译器的编译器有点不同,编译时间比单独使用Objective-C或C++的时间要长。 – Chuck 2010-12-20 04:59:33