博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android c 高级编程源码,Objective-C高级编程
阅读量:6902 次
发布时间:2019-06-27

本文共 2015 字,大约阅读时间需要 6 分钟。

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

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

是由编译器自动进行内存管理,编译器能完全清楚目标对象,并能立刻释放那些不再被使用的对象。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。

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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才会生成符号表文件。

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

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

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

7b3480cab10d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

你可能感兴趣的文章
Linux中tomcat启动很慢,SessionIdGeneratorBase.createSecureRandom耗时5分钟
查看>>
Android倒计时案例展示
查看>>
openstack resize 更新显卡驱动程序解决问题
查看>>
人人都能够做深度学习应用:入门篇
查看>>
html中文乱码问题的解决
查看>>
Android学习——在Android中使用OpenCV的第一个程序
查看>>
elasticsearch删除索引报错【原】
查看>>
Colossus: Successor to the Google File System (GFS)
查看>>
SNF快速开发平台MVC-瀑布式分页组件
查看>>
测试同学打了鸡血一样的拼命测试就一定可以保障项目的质量吗?
查看>>
英伟达硬件加速解码器在 FFMPEG 中的使用
查看>>
mongodb的基本语法(一)
查看>>
背水一战 Windows 10 (59) - 控件(媒体类): Image, MediaElement
查看>>
在centos7中离线方式安装mysql5.7
查看>>
怎样使用Fiddler获取WebApi的token值?
查看>>
vueThink权限配置
查看>>
VS远程调试
查看>>
网口扫盲一:网卡初步认识
查看>>
分布式事务解决方案
查看>>
Android 多线程之HandlerThread 完全详解
查看>>