作家
登录

iOS编译过程的原理和应用

作者: 来源: 2017-04-11 09:44:33 阅读 我要评论

媒介

一般可以将编程说话分为两种,编译说话和直译式说话。

像C++,Objective C都是编译说话。编译说话在履行的时刻,必须先经由过程编译器生成机械码,机械码可以直接在CPU上履行,所以履行效力较高。

像JavaScript,Python都是直译式说话。直译式说话不须要经由编译的过程,而是在履行的时刻经由过程一个中心的说冥器将代码解释为CPU可以履行的代码。所以,较编译说话来说,直译式说话效力低一些,然则编写的更灵活,也就是为啥JS大年夜法好。

iOS开辟今朝的常用说话是:Objective和Swift。二者都是编译说话,换句话说都是须要编译才能履行的。二者的编译都是依附于Clang + LLVM. 篇幅限制,本文只存眷Objective C,因为道理上大年夜同小异。

可能会有同窗想问,我不懂编译的过程,写代码也没问题啊?这点我是不否定的。然则,充分懂得了编译的过程,会对你的开辟大年夜有赞助。本文的最后,会以以下几个例子,来讲解若何合劳顿用XCode和编译

  • __attribute__
  • Clang警告处理
  • 预处理
  • 插入编译期脚本
  • 进步项目编译速度

对于不想看我啰里笆攀缆讲一大年夜堆道理的同窗,可以直接跳到本文的最后一个章节。

iOS编译

平日,当项目很大年夜,源代码和三方库惹人很多的时刻,我们会发明编译的速度很慢。在懂得了XCode的编译过程后,我们可以大年夜以下角度来竽暌古化编译速度:

iOS编译过程

编译器前端

编译器前端的义务是进行:语法分析,语义分析,生成中心代码(intermediate representation )。在这个过程中,会进行类型检查,如不雅发明缺点或者警告会标注出来在哪一行。  

编译器前端

编译器后端

编译器后端会进行机械无关的代码优化,生成机械说话,并且进行机械相干的代码优化。iOS的编译过程,后端的处理如下

  • LVVM优化器会进行BitCode的生成,链接期优化等等。

履行一次XCode build的流程

当你在XCode中,选择build的时刻(快捷键command+B),会履行如下过程

  • 编译信息写入帮助文件,创建编译后的文件架构(name.app)
  • 处理文件打包信息,例如在debug情况下
  1. Entitlements: 
  2.     "application-identifier" = "app的bundleid"
  3.     "aps-environment" = development; 
  4. }  
  • 履行CocoaPod编译前脚本
    • 例如对于应用CocoaPod的工程会履行CheckPods Manifest.lock
  • 编译各个.m文件,应用CompileC和clang敕令。

经由过程这个编译的敕令,我们可以看到

-x objective-c 指定了编译的说话

-arch x86_64制订了编译的架构,类似还有arm7等

-fobjc-arc 一些列-f开首的,指定了采取arc等信息。这个也就是为什么你可以对零丁的一个.m文件采取非ARC编程。

http://blog.csdn.net/hello_hwc/article/details/50036323

– .o 文文件,也就是上文提到的.m文件编译后的结不雅。

-Wno-missing-field-initializers 一系列以-W开首的,指的是编译的警告选项,经由过程这些你可以定制化编译选项

-DDEBUG=1 一些列-D开首的,指的是预编译宏,经由过程这些宏可以实现前提编译

-iPhoneSimulator10.1.sdk 制订了编译采取的iOS SDK版本

-I 把编译信息写入指定的帮助文件

-F 链接所须要的Framework

-c ClassName.c 编译文件

-o ClassName.o 编译产品

  • 链接须要的Framework,例如Foundation.framework,AFNetworking.framework,ALiPay.fframework
  • 编译xib文件
  • 拷贝xib,图片等资本文件到结不雅目次
  • 编译ImageAssets
  • 处理info.plist
  • 履行CocoaPod脚本
  • 拷贝Swift标准库
  • 创建.app文件和对其签名

IPA包的内容

例如,我们经由过程iTunes Store下载微信,然后获得ipa安装包,然后实际看看其安装包的内容。  

  • 右键ipa,重定名为.zip
  • 双击zip文件,解紧缩后会获得一个文件夹。所以,ipa包就是一个通俗的紧缩包。   

  • 右键图中的WeChat,选择显示包内容,然后就可以或许看到实际的ipa包内容了。

经由过程XCode的Link Map File,我们可以窥测二进制文件中构造。

 1/7    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  在Node.js中看JavaScript的引用

早期进修 Node.js 的时刻 (2011-2012),有挺多是大年夜 PHP 转过来的,当时有部分人对于 Node.js 编辑完代码须要重启一下表示麻烦(PHP不须要这个过程),于是社区里的同伙就开端倡导应用 >>>详细阅读


本文标题:iOS编译过程的原理和应用

地址:http://www.17bianji.com/lsqh/34703.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)