iOS 头文件导入@class注意事项

一,导入头文件有两种不同的方法:使用引号或者使用尖括号,例如,#import <Cocoa/Cocoa.h>和#import "Tire.h".带尖括号的语句是用来导入系统头文件的,而带引号的语句则说明导入的是项目本地的头文件,如果你看到的头文件名是用尖括号括起来的,那 么这个头文件对你的项目来说是只读的,因为它属于系统。如果头文件名是被引号括起来的,那么你(或参与这个项目的其他人)就可以编辑它。

二,Objective-C提供了一种方法能够减少由依赖关系引起的重新编译所带 来的影响。依赖关系问题的存在是因为Objective-C编译器需要某些信息才能够工作。有时,编译器需要知道类的全部信息,例如它的实例变量配置,它 所继承的所有类等。而有的时候,编译器只需要知道类名即可,不需要了解它的整个含义。

例如,对象复合后,这个复合使用指向对象的指针。这样之所以能行得通,是因为所有Objective-C对象都存放在动态分配的内存中。编译器只需要知道这是一个类就可以了。然后它就地发现这个实例变量是指针的大小,而这个指针的大小在整个程序中都不会改变。

Objective-C引入了关键字@class来告诉编译器:“这是一个类,所以,我只需要通过指针来引用它。”这样编译器就会“平静”下来:它并不需要知道关于这个类的更多信息,只要了解它是通过指针来引用的即可。

@class创建了一个前向引用。就是在告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些”,如果有循环依赖关 系,@class也很有用。即A类使用B类,B类也使用A类。如果试图通过#import语句让这两个类互相引用,那么最后就会出现编译错误。但是如果在 A.h中使用@class B,在B.h中使用@class A,那么这两个类就可以互相引用了。

三,有时候,我们在文件中导入了Engine.h而没有导 入<Cocoa/Cocoa.h>,这是为什么呢?我们知道,Engine.h中已经导入了<cocoa/Cocoa.h>,所 以,不需要我们自己再导入一遍了。然而,如果你想在该文件里加上#import <Cocoa/Cocoa.h>,这是可以的,因为#import命令具有足够的智能,它不会重复导入自己的文件。

四,在学习过程中,我们认识了跨文件依赖关系,在这种关系中,头文件或源文件需要 使用另一个头文件中的信息。文件之间互相重复的导入会增加编译次数,也会导致不必要的重复编译。而巧妙地使用@class命令能够减少编译时 间,@class告诉编译器“相信我,你最终能够了解这个名称的类”,它可以减少不得不导入的头文件数量。

iOS 头文件导入@class注意事项的更多相关文章

  1. c语言头文件以及make注意事项

    c语言头文件以及make注意事项 头文件说明:自己定义的头文件和项目文件放在一起,注意使用""而不是使用<>,系统的头文件才使用<> 当main函数要调用其 ...

  2. 【读书笔记】iOS-头文件导入-@class注意事项

    一,导入头文件有两种不同的方法:使用引号或者使用尖括号,例如,#import <Cocoa/Cocoa.h>和#import "Tire.h".带尖括号的语句是用来导入 ...

  3. Xcode10 不能导入头文件(导入头文件不提示)

    连接地址:https://blog.csdn.net/wyz670083956/article/details/87774705 xcode10可能是:Project Settings

  4. iOS,plist文件、pct文件,工程设置

    1.使用pch文件 2.在info.plist中配置URL Schemes 3.plist配置拍照界面,复制,粘贴等菜单的显示语言 显示中文 4.使用非ARC库/ARC库 5.链接选项-Objc &a ...

  5. C++ 头文件系列(iomanip)

    1. 简介 该头文件定义了一些参数化的操纵器(manipulatators),注意ios头文件也定义了一些. 2. maniapulators 2.1 C++98 resetiosflags : 重置 ...

  6. C++头文件中的模板类

    C++头文件中的模板类 这已经是我的第三篇关于头文件的博客了,没想到我还是踩了个巨坑. 大家都知道要在头文件里声明类成员,在源文件中实现. 但是今天写数据结构作业,在头文件(Stack.h)定义了一个 ...

  7. IOS 使用cocoapods后无法导入头文件问题

    IOS 使用cocoapods后无法导入头文件问题 这时候如果你发现import的时候没有提示AFN e t wo r k i n g.h的文件,可以在target-Build Settings下修改 ...

  8. iOS - 静态库的导入和头文件路径的设置

    开发过程中,免不了要用到一些第三方或者是别人写好的一些Demo,这时就经常会用到别人写的一些静态库(.a文件)和n多个头文件(.h文件),这些文件不是简单地把它们拉到自己的工程里面就行的,还要设置一些 ...

  9. iOS开发中遇到的错误整理 - 集成第三方框架时,编译后XXX头文件找不到

    iOS编译报错-XXX头文件找不到 错误出现的情况: 自己在继承第三方的SDK的时候,明明导入了头文件,但是系统报错,提示头文件找不到 解决方法 既然系统找不到,给他个具体路径,继续找去! 路径就填写 ...

随机推荐

  1. ionic 项目中 使用 sass

    注: 1.先安装node-sass  -->> npm install --save node-sass --registry=https://registry.npm.taobao.or ...

  2. POJ--2752--Seek the Name, Seek the Fame【KMP】

    链接:http://poj.org/problem? id=2752 题意:对于一个字符串S,可能存在前n个字符等于后n个字符,从小到大输出这些n值. 思路:这道题加深了对next数组的理解.next ...

  3. 在浏览器中使用JS打开并展示PDF文件

    使用jquery.media.js插件 示例: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=& ...

  4. .net完整的图文验证

    摘自:http://blog.csdn.net/durongjian/article/details/4336380 一.创建ValidaeCode类库工程: 1.创建ValidaeCode类库工程, ...

  5. HDUOJ 1099——Lottery

    Lottery Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. Python练习笔记——利用递归求年龄,第五个比第四个大2岁...

    现在有五个人, 第五个人比第四个人大两岁,18 第四个人比第三个人大两岁,16 第三个人比第二个人大两岁,14 第二个人比第一个人大两岁,12 第一个人现10岁,                 10 ...

  7. RMAN兼容性列表

    Target/Auxiliary Database RMAN Executable Catalog Database Catalog Schema 8.1.7.4 8.1.7.4 >=8.1.7 ...

  8. Linux调度器 - 进程优先级

    一.前言 本文主要描述的是进程优先级这个概念.从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级.realtime优先级.归一化优先级 ...

  9. Python min() 方法

    描述 Python min() 方法返回字符串中最小的字母(26个字母中最小的是A). 语法 min() 方法语法: min(S) 参数 S -- 字符串. 返回值 返回字符串中最小的字母. 实例 以 ...

  10. MPU6050读取FIFI数据时mpu_dmp_get_data的返回值一直是1

    试验中发现:不断进行循环读fiffo就可以得到正常数据.形如这样 );//返回值:0,DMP成功解出欧拉角 printf("pitch=%f\troll=%f\tyaw=%f\r\n&quo ...