iOS7新增关键字@import。这在开发中用的比较少。但是最近在开发中碰到了这种用法,便进一步了解了一下。
1.使用@import的最大好处之一是当需要使用某个苹果自己的框架时,再也不需要在项目的setting中做 “点击’+’号按钮搜索依赖框架添加” 这样的操作了,@import内部会自动实现这个过程。这样我们就可以使用代码完成以前需要在图形界面完成的动作。苹果又为开发者做出了改进。
2.目前使用@import仅适用于苹果自己的框架,当在项目中想使用@import导入自己搭建的框架或者第三方框架时,是无效的。
3.使用@import,旧项目使用时会报错,只需要在Build Setting中搜索Modules设置Enable Modules为YES。新项目则默认为YES无需设置。
4.上述所说@import还涉及到一个iOS7新特性Modules和Autolinking。在iOS7以前,我们使用系统框架需要导入该框架,并且在要用到的类中#import <FrameworkFoo/HeaderBar.h>头文件的引用不管是#include还是#import都是将目标.h文件复制粘贴到当前文件。#import相比于#include有避免重复引用的功能(比如B和C都引用了A,D又同时引用了B和C,这样A中定义的东西就在D中被定义了两次,重复了)#import,保证每个头文件只会被引用一次。Modules相当于将框架进行了封装,然后加入在实际编译之时加入了一个用来存放已编译添加过的Modules列表。如果在编译的文件中引用到某个Modules的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。这样被引用到的Modules只会被编译一次,但是在开发时又不会被意外使用到,从而同时解决了编译时间和引用泛滥两方面的问题。拿UIKit为例:
|
|
最后:说到这里顺便提一下@class:@class是告诉编译器存在这个类,当实际使用时还是要@import进来,这样可以有效防止循环引用引发的编译错误。