- 聊聊Xcode 中的编译过程
基本的编译过程分为四个步骤:
预处理(Pre-process):把宏替换,删除注释,展开头文件,产生 .i 文件。
编译(Compliling):把之前的 .i 文件转换成汇编语言,产生 .s文件。
汇编(Asembly):把汇编语言文件转换为机器码文件,产生 .o 文件。
链接(Link):对.o文件中的对于其他的库的引用的地方进行引用,生成最后的可执行文件(同时也包括多个 .o 文件进行 link)。
OC,Swift都是编译型语言。
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。
虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。
在运行的时候,由JVM将字节码再翻译成机器语言。
2.编译器
https://zhuanlan.zhihu.com/mosky/19878094
LLVM编译器后端 Clang是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。
Clang编译Objective-C代码时速度为GCC的3倍。
我们在说到GCC的时候提到了GDB,说它能够纠错。Clang下纠错工具就是LLDB。GDB的一个限制——“用户界面”,,所以LLDB的一个优点就是有一个良好的GUI。
Xcode提供的playground文件中实现。支撑这个的背后应该就是LLVM+Clang。
3.加密相关
是网络上使用最广泛的编码系统,能够将任何二进制数据,转换成只有 65 个字符组成的文本文件
数据本身的加密解密使用对称加密算法(AES)
用 RSA 算法加密并传输对称算法所需的密钥
MD5同样的密码,同样的加密算法,每次加密的结果是不一样 服务器时间戳密码
苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全
4.线程相关
同步(sync) 和 异步(async) 的主要区别在于会不会阻塞当前线程
互斥锁:保证锁内的代码,同一时间,只有一条线程能够执行!如果发现有其他线程正在执行锁定的代码,线程会进入休眠状态,等待其他线程执行完毕,打开锁之后,线程会被唤醒
自旋锁:如果发现有其他线程正在执行锁定的代码,线程会以死循环的方式,一直等待锁定代码执行完成
自旋锁更适合执行非常短的代码,原子属性内部的锁是自旋锁,自旋锁的执行效率比互斥锁高
a> 线程间通讯
比如异步去下载图片,然后回到主线程去更新UI
b>多线程之间的数据共享
- 可以加上同步锁
GCD:
barrier : 比如往线程不安全的NSMutableArray 操作数据
group: enter leave notify
after: 延时操作
once: 一次性执行 单例
NSOperation :
最大操作并发数(GCD不好做)
继续/暂停/全部取消
跨队列设置操作的依赖关系
- 算法相关
6.C语言相关
7.直播 IM
推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)
1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动