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-11-09 19:16:35

    java标记过期方法

    java注解:@Deprecated(不建议使用的,废弃的);@SuppressWarnings(忽略警告,达到抑制编译器产生警告的目的)

  • 2019-11-12 02:56:39

    使用.htaccess重定向后无法显示图片,CSS失效,该如何处理

    现在我需要把这个域名泛解析到blog目录(*.mydomain.org),同时保持另外两个目录的解析不变。尝试对最后一段作以下修改后(前面的内容不变),出现问题:另两个目录中的网站内的图片无法显示,CSS全部失效。

  • 2019-11-14 11:21:34

    vue中的this指向问题

    ※ 对于普通函数(包括匿名函数),this指的是直接的调用者,在非严格模式下,如果没有直接调用者,this指的是window。showMessage1()里setTimeout使用了匿名函数,this指向 window。 ※ 箭头函数是没有自己的this,在它内部使用的this是由它定义的宿主对象决定。showMessage2()里定义的箭头函数宿主对象为vue实例,所以它里面使用的this指向vue实例。