2016-07-19 14:00:00 lxubin 阅读数 3749

玩过ios开发的都知道,在XCode 中创建一个新的类文件,会在 . h 和 .m 文件中自动创建两个几乎完全一样的@interface。 

比如: 创建一个UIViewController 的实例MainController:


在 .h 文件中:

#import <UIKit/UIKit.h>

@interface MainController : UIViewController

@end

在 .m 文件中:

#import "UIViewController.h"

@interface MainController ()

@end

乍一看,两个@interface几乎一样。 

你可以在 .h 文件中,声明 属性 和 成员变量; 也可以在.m文件中声明这些属性 和 成员变量。 更为有意思的是,你甚至可以在storyboard 中,通过拖拽方式,将一个IBOutlet 拖拽到 .h 或 .m 文件中。

尽管可以随意操作,但从本质上讲,还是存在较大差异的。 

属性:

属性的区别就是,在.h文件中声明的属性,外部类可以通过“类实例.属性”来调用,但在.m中声明的则不可以,获取和设置的方法,只能是通过setValue:forKey和valueForKey来实现。

成员变量:
成员变量,有三种权限,就是大家都知道的@private、@protected、@public ,写在.m文件中时,相当于是@private权限,子类无法访问,验证了一下,做权限修改也无效。而写在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改。



再进一步想想,也容易理解。

因为 .h 文件可以被其他.m 文件 #import。 自然就可以被其他.m文件访问; 而在.m 文件中所声明的,其实就是一个 static的 变量或方法,自然不能被其他文件访问。


小结:
在.h文件中声明的属性,外部类可以调用,但在.m中声明的外部类则不可以调用。

在.m文件中声明的成员变量,只有本类可以访问,在.h文件中声明的成员变量,本类和子类可以访问。


2011-06-23 10:55:00 HopingWhite 阅读数 1110

今天在修改项目时发现修改了一个.h文件之后,没有make clean直接增量make导致整个程序的运行很奇怪,以前发现过.h文件修改之后增量make会使程序运行在一个未知的状态。

 

其实.h如果被修改了make的推导是不会管它的,这样它就不会重新编译整个系统,而其他一些依赖这个.h文件的.o可能已经不合适了,这样增量编译导致的结果就是杯具了。

 

2017-09-29 13:35:32 s31213 阅读数 250
创建C++类生成的头文件后缀变成了.hpp
并非.h文件
这两个文件都是可以被正常编译的
只是从命名上可以看出有一定的不同,.
h一般都只是声明,而.hpp文件说明内容中既有函数声明也有函数的定义,
就如同大部分开发者都把inline函数定义到.inl文件中一样。
由于已经养成了长期的使用习惯,
每次都要手动去改文件的扩展名和文件头的注释信息。


只需要找到xcode生成C++文件的模板位置,
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\
Templates/Source/C++\ File.xctemplate/WithHeader
将 ___FILEBASENAME___.hpp文件重命名为 ___FILEBASENAME___.h,然后将 ___FILEBASENAME___.hpp与 ___FILEBASENAME___.cpp文件内容中对应的
.hpp也修改成.h
2018-07-20 11:54:00 weixin_34348174 阅读数 108

没接触过ios的原生开发,对这个有点不解。
下面来了解下:
新建一个类 这个类继承 NSObject的类,就会创建出这样两个文件


img_a52f8bfb6b727c1b2d21fc327b177bff.png
image.png

img_8fa4a53bc631e50d3f51cc490b647454.png
image.png
img_faa30a455646fa54d3e09c8d83bb57af.png
image.png
img_67945d09679cf383cc46e4dda805df94.png
image.png
在.h文件中

          有一个import,这是用来导入工具包,就是foundation框架

          @这个标志表示你使用的是object-c语言

         @interface 是声明类的关键字 

         tongdun是类名

         : 冒号表示继承,oc中是单继承模式

         NSObject是父类

         在@interface和@end之间是用来声明属性和方法的

在.m文件中声明的属性是无法被外界看到的,所以也成为私有属性,而在.h中的属性就是public属性

 

在.m文件中

  #import ”tongdun.h“ 用来导入.h中声明的属性和变量

  @implementation tongdun   implementation是实现类的关键字

学会建类之后,接下来就可以 学习下 如何写ios和RN的交互类。

2014-09-20 14:32:17 snow_moon_night 阅读数 1048

iOS:如何理解.h 和 .m 文件中的同一个@interface  

在XCode 中创建一个新的文件,会在 . h 和 .m 文件中自动创建两个几乎完全一样的@interface。  比如: 创建一个UIViewController  的实例:

在 .h 文件中:  

#import <UIKit/UIKit.h>

@interface UUTaskDetailController : UIViewController

@end

在 .m 文件中:

#import "UUTaskDetailController.h"

@interface UUTaskDetailController ()

@end

乍一看,除了高亮的部分外,其他的都一样。 你可以在 .h 文件中,声明 @property 和 method;  也可以在.m文件中声明这些@property 和 method。  更为有意思的是,你甚至可以在storyboard 中,通过拖拽方式,将一个IBOutlet 拖拽到 .h 或 .m 文件中。

尽管可以随意操作,单从本质上讲,还是存在较大差异的。 接下来,让我们看看它们背后的故事。

如有你有public 和 private 的概念, 你可以理解为:  .h 文件声明的@property ,是公共的,是可以被其他的.m 文件访问的; 而 在.m文件中声明的@property,是私有的, 只能在该.m文件中使用。 

再进一步想想,也容易理解。 

因为 .h 文件可以被其他.m 文件 #import。 自然就可以被其他.m文件访问; 而在.m 文件中所声明的,其实就是一个 static的 变量或方法,自然不能被其他文件访问。 

小结:

弄清楚了 .h  与 .m 文件的差别后,你完全可以根据自己的意愿,随心所欲地使用。  你声明的 property ,如果不想被其他文件调用, 那就声明在 . m 文件好了; 如果想让其他文件调用呢, 当然要声明在 .h 文件中。

ios 生成.a文件

阅读数 1882

iOS-.h和.m文件

阅读数 0

没有更多推荐了,返回首页