请稍侯

iOS面试常问

30 November 2021

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原理