iOS面试常问
iOS面试常问
NSObect对象本质 答: 本质是对C语言结构体objc_object的封装,主要实现是在C++的中结构体objc_object中实现的。其中的isa指针是个联合体,实现了objc_object 与 objc_class 的继承引用体系结构。
KVO原理 答: 为被观察者对象动态生成其子类,并把观察者对象的isa替换成新生的子类,在子类中重载了setXXProperty方法及setValue:forKey方法,并在重载的方法中触发KVO的回调。
Block底层原理与捕获机制 答: Block底层是个结构体,有对函数指针与捕获变量的封装,有Global、Stack、Malloc三种类型的Block,捕获全局变量、静态变量、引用类型及__block修饰的变量是传引用,捕获基本类型的局部变量是值传递;捕获局部变量会发生Block_Copy,从栈上拷贝到堆上。
load 与 initnalize方法 答: load的调用是函数指针的直接调用 initnalize调用是走OC消息派发 -> 引伸问题:OC里消息派发流程和原理 load 与 ininalize 在类、父类及分类中的调用情况; 对性能影响:优化load;
修改编译顺序方案? 答:
RunLoop机制 答:
不用锁实现线程安全 答:
GCD 与 NSOperation
二进制重排 答: 减小启动时缺页(Page fault)发生的量;符号链接时导出启动时相应的linkMap,配置.order文件,重排符号顺序
卡顿监测实现方案: 答: CADisplayLink FPS 加RunLoop Observer + 子线程 + 信号量 + 计数 监听UI状态
子线程里加NSTimer,触发问题及加RunLoop后线程会不会退出问题 答:
线程保活 答: Runloop 加 port
自己实现线程池的方案 答: 保活线程 GCD Group
自己实现一个锁 答:
常见的锁 答: @syncronized NSLock NSConditionLock 自旋锁 信号量
不使用锁做线程安全 答: GCD 栅栏函数 GCD Group
线程优先级反转 答: 自旋锁内不释放资源的情况下,
C语言函数的Hook实现方案 答: fishHook可以hook动态链接库的函数; Clang插桩可hook所有的C函数;
swift 中 clousure 原理
逃逸闭包与非逃逸闭包的区别与使用场景
pod install、update 原理
Swift几个权限控制关键字 答: public open interal private filePrivate
视频播放器的原理,ffpeg主要模块 答: 视频播放器的原理要从获取视频数据到显示在屏幕上的过程说起,
性能优化
App启动详情流程及优化
UI VC界面加载流程
网络请求流程
https原理