@import Modules机制

Modules机制是iOS7 xcode5 的新特性。查看了一下相关资料在这里记录一下。

从#include到Modules

  • #include
    优点:学习过C语言应该不会陌生,导入头文件。使得开发方便很多。#include 就是简单的复制粘贴到该文件,例如在Test.h文件中调用#include< Test1.h> 就是将Test1.h中的内容复制粘贴到Test.h中。
    缺点:#include简单的复制粘贴,使用不当会带来很多问题。
    比如B和C都引用了A,D又同时引用了B和C,这样A中定义的东西就在D中被定义了两次,重复定义相同的东西是错误的。
  • #import
    优点:#import 是#include的升级,(import的实现是通过#ifndef一个标志进行判断,然后在引入后#define这个标志,来避免重复引用的)解决了#include重复引用的问题。
    缺点:如果一个文件被其他多个文件文件引用,比如A文件被A1,A2,A3…… (100)个文件引用,因为#include 和#import是复制粘贴,所以A文件被复制粘贴了100 次 ,代码大量增加。在编译的时候也要编译100次。编译速度被拖慢。
  • 预编译处理
    优点:C语言中使用预编译处理来解决上面的问题。把被大量引用 的文件进行预编译处理,这样在整个工程编译时,直接将预编译好的文件导入到引用文件中,解决了编译速度慢的问题。iOS 工程中的.pch文件就是采用了预编译处理。
    缺点:于是理论上说,想要提高编译速度,可以把所有头文件引用都放到pch中。但是这样面临的问题是在工程中随处可用本来不应该能访问的东西,而编译器也无法准确给出错误或者警告,无形中增加了出错的可能性。
  • Modules
    Modules相当于将框架进行了封装,然后加入在实际编译之时加入了一个用来存放已编译添加过的Modules列表。如果在编译的文件中引用到某个Modules的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。这样被引用到的Modules只会被编译一次,但是在开发时又不会被意外使用到,从而同时解决了编译时间和引用泛滥两方面的问题。
    关于普通开发者使用的这个新特性的方法,Apple在LLVM5.0(也就是Xcode5带的最新的编译器前端中)引入了一个新的编译符号@import,使用@符号将告诉编译器去使用Modules的引用形式,从而获取好处,比如想引用MessageUI,可以写成
@import MessageUI;

在使用上,这将等价于以前的#import

@import MessageUI.MFMailComposeViewController;

当然,如果对于以前的工程,想要使用新的Modules特性,如果要把所有头文件都这样一个一个改成@import的话,会是很大的一个工作量。Apple自然也考虑到了这一点,于是对于原来的代码,只要使用的是iOS7或者MacOS10.9的SDK,在Build Settings中将Enable Modules(C and Objective-C)打开,然后保持原来的#import写法就行了。是的,不需要任何代码上的改变,编译器会在编译的时候自动地把可能的地方换成Modules的写法去编译的。
Autolinking是Modules的附赠小惊喜,因为在module定义的时候指定来link framework,所以在编译module时LLVM会将所涉及到的框架自动帮你写到link里去,不再需要到编译设置里去添加了。

本文为读书笔记,在作者基础上加了自己的理解,相关的详细的操作请看原作者文章,感谢作者分享
http://blog.csdn.net/chengwuli125/article/details/12710447

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值