iOS面试题复盘

382 阅读2分钟

基础

load 和 initialize

load

main函数之前执行
父类与子类都实现load函数时,父类优先级高于子类
类的load方法执行顺序优先于类别(Category)
当有多个类别(Category)都实现了load方法,这几个load方法都会执行,但执行顺序不确定(其执行顺序与类别在Compile Sources中出现的顺序一致)
有多个不同类的时候,每个类load执行顺序与Compile Sources出现顺序一致
子类未实现load方法,不会调用父类方法

initialize

initialize 在类或者子类的第一个方法被调用前调用,即使类文件添加进项目,但是没有使用,initialize不会调用,由系统调用,也不需要再调用 [super initialize],系统调用
父类initialize执行顺序优先于子类
类别Category会覆盖当前类中的方法,父类或者子类不影响
多个类别实现initialize方法,系统只会执行一个,执行Compile Sources 列表中最后一个Category 的initialize方法
子类未实现initialize,但是父类实现了initialize,系统会调用父类的initialize,相当于父类执行两次initialize (A-B-C  如果A实现了,创建C的时候一共会调用三次A方法)

总结

  1. load方法时的环境很不安全,尽量减少load方法的逻辑,load方法是线程安全的,它内部使用了锁,应该避免线程阻塞在load方法中, 场景 方法交换
  2. initialize方法主要用来对一些不方便在编译期初始化的对象进行赋值,业务优先级低的可以延迟到这个方法执行,比如 支付 , 线程安全,避免耗时阻塞

@property

KVC原理

KVO原理

Block原理

RunLoop原理

Runtime原理

消息发送

weak实现原理

tcp三次握手,四次挥手

MVVM架构,实现绑定

block与通知区别

进程间通信

如何检测是否卡顿

autorelease

GCD和NSOperation的区别?

源码思路

Delegate 、Notification和KVO比较各自的优缺点

响应机制

事件传递

内存泄漏看法

深拷贝、浅拷贝

线程死锁

持久化

layoutSubViews

自我介绍,项目难点

TCP和UDP区别

HTTPS能防止中间人攻击吗

HTTPS是对称加密还是非对称加密

定时器和CADisplay区别

NSObject结构体里面有什么,大小为什么是16字节

项目优化

App启动时间优化

App包体积大小优化