在目标c中,当你说#import“MyClass.h”时实际发生了什么? (编译器是否为您复制了什么?)
编译器是否为您复制了一些内容? [当你说
#import "myClass.h"
]?
不,不是的。 #import
预处理程序指令几乎与#include
指令相同,但它不需要包含保护 – 一个从C借用的结构,这看起来并不直观。
#include
文本方式将指定文件的内容复制到指令出现的位置。 类的.h文件包含类的接口声明,因此您要复制类的声明。 在这两种情况下(来自类的.m或其他文件),您只是复制声明。
对于#import
,它与#include
完全一样,除了它跟踪它所包含的文件所包含的内容,因此你最终不会被声明一堆相同的类。
.h(头文件)是您class级的界面,包含您class级的“一般描述”。 当您看到界面时,您可以说出您的课程实际上做了什么。 有时接口可能包含一些信息或为空 – 这意味着您的类可以包含私有方法,您无法通过类’接口访问它们。
.m(objC中的消息文件, C中的.c或C ++中的.cpp,或objC ++中的.mm)是您的类的实现。
1 – >当预处理器看到#import
指令时,它将#import "UsefulClass.h"
行替换为’UsefulClass.h’文件的文本,所以你的类MyClass现在“熟悉”类UsefulClass并且可以使用它方法或变量。
2 – >请记住,该类总是由接口和实现(.h + .m)组成。 这就是你应该在.m文件中导入标题的原因。 所以, #import
在第一种情况和第二种情况下做同样的事情。
3 – >是的,您可以访问私有方法。 第一种方式:您可以从类inheritance,并且它的所有方法(私有和公共)都可以在您的子类中使用。 第二种方式:是的,你可以导入.m文件。 但! 所有这些都不推荐。 通过协议,您永远不应该访问私有方法。 当开发人员制作私有方法时,他必须有充分的理由。 总之,objC没有私有方法。 ObjC扩展是模仿私有方法,所以objC开发者应该小心。
4 – >建议在ob中使用#include,在objC中使用#import(或现代语言中的@import)。 来自Scott Knaster,Waqar Malik,Mark Dalrymple的“在Mac上为OS X和iOS学习Objective-C”一书:
#import保证头文件只包含一次,无论实际看到该文件的#import指令多少次。 注意:在C中,程序员通常使用基于#ifdef指令的方案来避免一个文件包含第二个文件的情况,然后递归地包含第一个文件。 在Objective-C中,程序员使用#import来完成同样的事情。
5 – > @interface MyClass()
是objC类,空名称为扩展名(它只是objC概念),请查看文档以了解它。 但请记住,它实际上不是私有物,它只是模仿。
以上就是c/c++开发分享目标c – 导入.m和.h文件 – 它做了什么相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549886.html