iOS面试题知识点总结(持续更新)

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。

你可能感兴趣的:(iOS面试题知识点总结(持续更新))