【iOS】.h .m .mm .cpp文件 您所在的位置:网站首页 文件mm是什么 【iOS】.h .m .mm .cpp文件

【iOS】.h .m .mm .cpp文件

2024-07-07 18:05| 来源: 网络整理| 查看: 265

【iOS】.h .m .mm .cpp文件

在Xcode中我们会发现以 .h .m .mm .cpp为后缀名的文件,下面分别解释下这些文件的作用意义

.h:头文件。头文件包含类,类型,函数和常数的声明。

.m:源代码文件。这是典型的源代码文件扩展名,可以包含Objective-C和C代码。

.mm:源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名

.cpp:只能编译C++(cpp文件是用C++语言编写的源代码文件格式)

Objective-C 和 C、C++ 如何混用 OC的编译器处理后缀为 .m的文件时,可以识别 OC和 C的代码,

处理 .mm文件可以识别OC,C, C++代码,但 .cpp文件必须只能用C++代码,而且cpp文件include的头文件中,也不能出现OC的代码,因为cpp只是cpp

在 .mm文件中混用 cpp文件直接使用即可,所以OC混cpp不是问题

在 cpp中混用OC其实就是使用OC编写的模块是我们想要的。

如果模块以类实现,那么要按照cpp class的标准写类的定义,头文件中不能出现OC的代码,包括#import cocoa的。实现文件中,即类的实现代码中可以使用OC的东西,可以import,只是后缀是mm。

如果模块以函数实现,那么头文件要按 C的格式声明函数,实现文件中,C++函数内部可以用OC,但后缀还是 mm或 m。

总结:只要cpp文件和cpp include的文件中不包含OC的东西就可以用了,cpp混用OC的关键是使用接口,而不能直接使用 实现代 码,实际上cpp混用的是OC编译后的o文件,这个东西其实是无差别的,所以可以用OC的编译器支持cpp。

.mm的区别是告诉gcc在编译时要加的一些参数。当然.mm还可以命名成.m,但在编译时要手动加参数(麻烦)

#import 和 #include,@class区别

当你需要在源代码中包含头文件的时候,你可以使用标准的#include编译选项,但是Objective-C提供了更好的方法。#import选项和#include选项完全相同,只是它可以确保相同的文件只会被包含一次。Objective-C的例子和文档都倾向于使用#import。

#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import用来包含系统的头文件,#import“”用来包含用户头文件。

注意#import或#include的位置要在 .m 或 .mm文件里,如果在 .h头文件里是没用的

iOS中还有其他文件类型,可自行查阅参考,这里不做详述

.o 文件(目标文件)

.a 静态库文件。其实就是N个.o文件的集合

.dylib: 动态库文件

.framework(系统的.framework是动态库,自己建立的.framework是静态库)

库是共享程序代码的方式,一般分为静态库和动态库。

静态库与动态库的区别

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

iOS里静态库形式?

.a和.framework

iOS里动态库形式?

.dylib和.framework

系统的.framework是动态库,我们自己建立的.framework是静态库。

a与.framework区别

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有