iOS技术知识点
1、weak指针的原理?
当一个对象要释放时,会自动调用dealloc,接下来的调用轨迹是
dealloc
_objc_rootDealloc
rootDealloc
object_dispose
objc_destructInstance(obj->clearDeallocation 将弱引用对象置为nil)、free
答案:
将弱引用对象存到一个哈希表里,当这个对象要销毁,取出当前对象对应的弱引用表,把弱引用表里存储的弱引用到清除掉
2、ARC都帮我们做了什么?
ARC是LLVM编译器(Xcode架构编译器的框架系统,c++语言) 和 Runtime 互相协作的一个结果
ARC利用LLVM编译器在大括号快结束的时候自动生成retain、release、autorelease代码
ARC利用Runtime在程序运行中处理弱应用等相关操作
3、iOS中的常见多线程方案?
技术方案 | 简介 | 语言 | 线程生命周期 | 使用频率 |
---|---|---|---|---|
pthread | 1、 一套通用的多线程API 2、 适用于Unix\Linux\Windows等系统 3、跨平台\可移植 4、使用难度大 |
C | 程序员管理 | 几乎不用 |
NSThread | 1、 使用更加面向对象 2、 简单易用、可直接操作线程对象 |
OC | 程序员管理 | 偶尔使用 |
GCD | 1、 旨在替代NSThread等线程技术 2、 充分利用设备的多核 |
C | 自动管理 | 经常使用 |
NSOperation | 1、 基于GCD(底层是GCD) 2、比GCG多了一些简单实用的功能 3、使用更加面向对象 |
OC | 自动管理 | 经常使用 |
4、iOS NSThread GCD NSOperation的优缺点?
** NSthread: **
优点:比其他两种轻量级。
缺点:需要自己管理线程的生命周期,线程同步。 线程同步对数据的加锁会有一定的开销。
** Operation、GCD: **
优点:不需要关心线程管理,数据同步的事情。
两者区别:NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。GCD主要与block结合使用。代码简洁高效
1. 性能:GCD更接近底层,而NSOperationQueue则更高级抽象,所以GCD在追求性能的底层操作来说,是速度最快的。这取决于使用Instruments进行代码性能分析,如有必要的话
2. 从异步操作之间的事务性,顺序行,依赖关系。GCD需要自己写更多的代码来实现,而NSOperationQueue已经内建了这些支持
3. 如果异步操作的过程需要更多的被交互和UI呈现出来,NSOperationQueue会是一个更好的选择。底层代码中,任务之间不太互相依赖,而需要更高的并发能力,GCD则更有优势
个人总结:我们应该忘记微小的性能提升。过早优化是万恶之源。只有Instruments显示有真正的性能提升时才有必要用低级的GCD。
网友评论