Men的博客

欢迎光临!

0%

面试记录

多线程、原理:优缺点:pthread、NSThread、GCD、NSOperation、
线程锁:原理:synchronized(互斥+递归)、NSLock(互斥)、NSCondition(互斥锁+条件变量。可以给线程加锁)、NSConditionLock(生产者消费者模型)、NSRecursiveLock(递归锁)、dispatch_semaphore(信号量)
自旋锁和互斥锁区别 :自旋不释放CPU,效率高,占用资源大
GCD功能:延迟执行、只执行一次、串行执行、主队列执行、异步执行、同步执行、任务调度优先级
死锁原因:
三个网络执行完再处理:dispatch_group_notify
串行执行:dispatch_barrier_async形成栅栏
如何保证NSNotificationCenter线程安全:block-weak方式、delloc移除监听、NSPropty
iOS线程间的通信:NSMachPort
延时操作:sleep、NSTimer、dispatch_after、performSelector afterDelay:
NSTimer子线程执行:添加到RunLoop中
计算机线程安全:原子操作、锁、信号量、过度优化
类和类对象:struct objc_class : objc_object
protocol_t继承objc_object,所以也就具备对象特征
weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key
load:加载时调用,父类->子类->分类
initialize:第一次调用类的属性方法时会调用
类和元类都有自己的继承体系,但它们都有共同的根父类NSObject,而NSObject的父类指向nil。
OC发消息流程:
1.检查方法是否需要忽略、target是否是nil
2.通过isa查找缓存、方法列表、父类方法列表至NSObject
3.动态方法解析、是否能给类添加方法(动态接收者)
4.消息转发给其他接收者(备用接收者、完整转发)
5.抛出异常
runtime常见操作:
1.动态添加方法
2.交换两个方法
3.拦截方法,添加功能
4.动态创建模型对象
5.归档和解档的属性遍历
Runloop:结构原理
autorelease pool和runloop关系
NSTimer其实是一种资源,source必须加到runloop中才会起作用,performSelecter:afterDelay:其实是往runloop中添加NSTimer,如果线程中没有runloop,那么这个方法就会失效。
CAAnimation是由RunloopObserver触发回调来重绘
AutoreleasePool原理和结构:由若干个AutoreleasePoolPage以双向链表的形式组合
weak实现原理:Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak
表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的
地址(这个地址的值是所指对象的地址)数组。
Block原理:是一个OC对象
__block、__weak __strong

tableView卡顿
应用优化
卡顿检测
启动流出
AFN、SDWebImage
事件分发:UIApplication-》UIWindow-〉View-》 hitTest:withEvent: -〉pointInside:withEvent:
点手机和runloop关系:NSMachPort可以用做runloop源苹果注册了一个 Source1 (基于 mach port 的)
用来接收系统事件,其回调函数为 __IOHIDEventSystemClientQueueCallback()
我们触发了事件(触摸/锁屏/摇晃等)后由IOKit.framework生成一个 IOHIDEvent事件
而IOKit是苹果的硬件驱动框架 _UIApplicationHandleEventQueue()把IOHIDEvent处理包
装成UIEvent进行处理分发
Category:原理:装饰模式
remethodizeClass 这个函数的主要作用是将 Category 中的方法、属性和协议整合到类(主类或元类)中,更新类的数据字段

类别(category)主要有三个作用
类别和Extension区别
类别为什么不能添加实例变量
如何在重写后,保证只调用原类方法
在协议 和 分类 中如何使用 @property
如何在Category中添加变量
KVO实现原理
设计模式:代理模式、观察者模式、单例模式、工厂模式
架构: MVC、MVVM、MVP

http三次握手4次挥手
OSI七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
加密:对称、非对称
pod:原理
dSYM:

PREP表达法是指:position(观点) 、reason (理由)、 evidence(证据)

如何解决面试官的问题

问题列表:
内存
介绍iOS的内存管理?

Runtime原理NSObject数据结构
runtime实现原理
nsobject数据结构

hash相关应用场景
cache相关的应用
生命周期
Block
Copy
RunLoop
多线程
网络
编译原理

程序优化
梳理程序绘制流程
滑动优化
程序启动优化
block
多线程
RunLoop

copy
网络

Runtime的理解:
平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者
Object-C需要Runtime来创建类和对象,进行消息发送和转发
将尽可能多的决策从编译时和链接时推迟到运行时(Apple)
运行时系统充当着Object-C语言的操作系统,它使语言能够工作(Apple)

用来干什么 基本作用

在程序运行过程中,动态的创建类,动态添加、修改这个类的属性和方法;
遍历一个类中所有的成员变量、属性、以及所有方法
消息传递、转发

用在哪些地方 Runtime的典型事例

给系统分类添加属性、方法
方法交换
获取对象的属性、私有属性
字典转换模型
KVC、KVO
归档(编码、解码)
NSClassFromString class<->字符串
block
类的自我检测