Objective-C高级编程

重点1:arc 是在编译阶段还是运行阶段被管理释放的?

Objective-C高级编程_第1张图片

是由编译器自动进行内存管理,编译器能完全清楚目标对象,并能立刻释放那些不再被使用的对象。apple llvm 编译器。

重点2:编译器>>GNU,GCC,clang,llvm。

GNU:计划本来是想创建一个完全兼容unix的自由软件环境,1.因为unix有一部分源码没有公开,希望发展一套完全公开的系统来取代unix ,但是后来独缺操作系统核心。GUN计划自己的内核hurd在2013年都没有稳定版本。linux后来出现,但是linux并不是gnu计划的一部分,应用了gnu计划软件,比如GCC编译器非常好。

GCC:是一套GNU开发的编程语言编译器,GCC原本只能处理C语言,后来逐渐扩展,后来可以处理C++后来处理Object-c  java  ada 等等语言,GCC成了跨平台软件的编译器的首选,GCC产生一样的中介码,因为中介码在各个其他平台上使用GCC编译。后来llvm和clang的崛起,clang作为编译器的前端,llvm作为后端,它的目标是提供一个GNU(gcc)的替代品,clang在内存和速度方面提高,mac之前的cocoa框架便是用GCC编译的,所以ios与mac os都是默认使用的GCC编译器(现在是clang与llvm)clang是编译器的前段,主要输出代码对应的抽象语法,并将代码编译成(llvm bitcode).llvm编译成机器语言。android的系统层因为是linux内核,自然也是GCC编译的,但是android的app因为是运行在Dalvik虚拟机,所以用的不是GCC。

LLVM:是一个编译器后端,利用虚拟技术,创造出编译时期,链结时期,运行时期以及“闲置时期”的优化。

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

编译器后端:会进行机器无关的代码优化,生成机器语言,并且进行机器相关的代码优化。

重点3:执行xcode build的流程做了什么?编译的时候注意下状态栏里面发生的变化。

1.链接需要的Framework,例如Foundation.framework,AFNetworking.framework,ALiPay.fframework。

2.编译xib文件。

3.拷贝xib,图片等资源文件到结果目录。

4.编译ImageAssets。

5.处理info.plist。

6.拷贝Swift标准库。

7.创建.app文件和对其签名。

8.生成dsym app实际执行的二进制文件中,是通过地址来调用方法的。通过dsym文件可以由地址映射到具体的函数。

重点4:在内部打包测试的时候,如何提高项目编译速度?

1.首先看到编译时间的对比。终端输入命令,打开xcode

defaults  write com.apple.dt.Xcode  ShowBuildOperationDuration  YES

2.  

(1)forward declaration @class通常放在.h文件中, 主要作用在于提升编译性能

(2)对常用的工具类进行打包(frame/.a) 如果打包成framework或者静态库,这样编译的时候,这部分代码就不需要重新编译了。

(3)常用的头文件要放到预编译文件里。xcode里面的pch文件是预编译文件。prefix header:

(4)debug模式下,不生成dsym文件,会提高速度。

Build Settings -> Build Options -> Debug Information Format中,置为了DWARF,如果选为DWARF则不会产生dSYM文件,必须选择DWARF with dSYM File才会生成符号表文件。

Objective-C高级编程_第2张图片

  (5)  Build Active Architecture Only-------可以只编译当前版本。高版本的xcode已经打开。

Objective-C高级编程_第3张图片


    (6)编译器优化-------。高版本的xcode已经打开。

Objective-C高级编程_第4张图片


   (7)为了方便还可以使用shell  自动打包脚本,直接发布到fir-----

详细 地址链接:http://www.jianshu.com/p/989dc82db5d0

重点5:MRC引用计数,nscopying,深拷贝,浅拷贝,ARC?

1.引用计数思考方式:1.生成对象2.持有对象3.释放对象4.废弃对象。

Objective-C高级编程_第5张图片
Objective-C高级编程_第6张图片


2.GNUStep alloc retail  release dealloc  autorelease nsmutableArrays的实现https://opensource.apple.com/     软件公开源码,

读:Objective-C高级编程 iOS与OS X多线程和内存管理

参考:http://blog.csdn.net/itianyi/article/details/43057279

你可能感兴趣的:(Objective-C高级编程)