ios .h与.m问价的区别以及import的区别

2021-01-16 09:36:12

参考链接 #import “” (嵌入头文件) 在 .h 和 .m 文件中有什么区别?

.h是描述
.m是实现
一般来说 如果.h用到的类 就要在.h中import
如果.h中没用到的 .m中用到的 可以放在.m中import(也可.h中)

这个具体看编码规范
一般为了方便 .h中用到的 在.h中 引用
.m用的在.m中引用

我觉得最大的区别就是写在.m中可以有效减少交叉引用,你用心一点,会发现Fundition和UIKit框架中全部使用.m内引用,.h内用Class声明的方式,这样做对app运行时没有影响的,但是可以提高编译器预处理的速度,你的项目越大,这个影响就越明显。

所以xcode6开始默认模版去掉了从前的公共头文件.pch文件,就是为了提高编译速度。




有的程序员喜欢把所有import语句写在.h文件的头部。而有的程序员则喜欢把import语句写在.m文件头部。

你可能觉得写在哪里都无所谓。

那么,import语句写在.h文件和.m文件的哪一个都无所谓吗?

这并不是真的。

通常,我习惯在.h文件头部加入所有的import语句,但在有一种情况下,我只能把import语句加在.m文件里——这是为了避免交叉引用错误。

如果你不知道什么是交叉引用错误,那么这篇文章将会告诉你:关于一个交叉引用Bug:“can not find interface declaration” 

因此我建议你像我一样,平时可以将import语句都放在.h文件里,当编译器告诉你找不到某个类的声明但你明明已经导入了这个类的头文件时,把import语句移到.m文件头部。






  • 2019-10-08 13:26:19

    详解Linux服务器最大tcp连接数

    1全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。 2对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。

  • 2019-10-08 14:09:57

    git创建分支并提交到远程分支

    远程分支的创建,一般都是基于本地分支的。即将本地的某个分支提交到远程,作为远程分支。命令如下:

  • 2019-10-09 13:38:20

    NPM依赖包版本号~和^和*的区别

    ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0 * 这意味着安装最新版本的依赖包

  • 2019-10-09 14:39:40

    import双反斜杠\\的意思

    ​ \表示引用根目录下面的PHPEXcel;不用\的话是引用当前目录下面的 PHPExcel

  • 2019-10-09 15:33:31

    nuxt,nuxtjs简单介绍以及使用

    在集成的服务器端框架之间进行选择: 选择您喜欢的 UI 框架: 选择您喜欢的测试框架: 选择你想要的 Nuxt 模式 (Universal or SPA) 添加 axios module 以轻松地将 HTTP 请求发送到您的应用程序中。 添加 EsLint 以在保存时代码规范和错误检查您的代码。 添加 Prettier 以在保存时格式化/美化您的代码。

  • 2019-10-10 00:21:35

    laravel 5.6以上日志理解及日志格式定义

    Laravel/Lumen的日志默认是基于Monolog进行了一层封装,如果要求不高,用起来还是十分容易的,本文基于laravel5.6/Lumen5.6版本进行解说。5.6版对日志系统做了升级,将日志的配置单独放以了config/logging.php 配置文件中,所以现在实用多了。

  • 2019-10-10 10:10:49

    @Scheduled注解各参数详解

    每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1点执行一次:0 0 1 1 * ? 每月最后一天23点执行一次:0 0 23 L * ? 每周星期天凌晨1点实行一次:0 0 1 ? * L 在26分、29分、33分执行一次:0 26,29,33 * * * ? 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

  • 2019-10-10 11:07:47

    Java8 - Map更优雅的迭代方式:forEach

    用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 value。JDK8强化了针对 Map 类的迭代方式,新增了一个默认方法 forEach,它接收一个 BiConsumer 函数。JDK给出的描述如下: