iOS 底层面试面试常见问题

高级iOS面试题

2021-02-14  本文已影响0人  浅陌

1、NSSet与NSArray的区别

2、NSHashTable与NSMapTable

(注:NSHashTable与NSSet的区别:NSHashTable可以通过option设置元素弱引用/copyin,只有可变类型。但是添加对象的时候NSHashTable耗费时间是NSSet的两倍。NSMapTable与NSDictionary的区别,同上)

3、属性关键字assign、retain、weak、copy

4、weak属性如何自动置nil的?

runtime会对weak属性进行内存布局,构建hash表:以weak属性对象内存地址为key,weak属性值(weak自身地址)为value。当对象引用计数为0 dealloc时,会将weak属性值自动置nil。

5、block的循环引用、内部修改外部变量、三种block

6、KVO底层实现原理?手动触发KVO?Swift如何实现KVO?

7、category为什么不能添加属性?怎么实现添加?与Extension的区别?category覆盖原类方法?多个category调用顺序?

8、load方法和initialize方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?

load Initialize
调用时机 app启动后,runtime初始化的时候 第一个方法调用前调用
调用顺序 父类 -> 本类 -> 分类 父类 -> 本类(如果有分类直接调用分类,本类不会调用)
没实现子类的方法会不会调用父类
是否沿用父类实现

9、对runtime的理解。——主要是方法调用时如何查找缓存,如何查找方法,找不到方法时怎么转发,对象的内存布局

OC中向对象发送消息时,runtime会根据对象的isa指针找到对象所属的类,然后在该类的方法列表和父类的方法列表中寻找方法执行。如果在最顶层父类中没有找到方法执行,就会进行消息转发:Method resoution(实现方法)、fast forwarding(转发给其他对象)、normal forwarding(完整消息转发。可以转发给多个对象)。

10、runtime中,SEL和IMP的区别?

每个类对象都有一个方法列表,方法列表存储方法名、方法实现、参数类型,SEL是方法名(编号),IMP指向方法实现的首地址。

11、autoreleasepool的原理和使用场景

11.jpg

12、Autorelase对象什么时候释放?

在没有手加Autorelease Pool的情况下,Autorelease对象是在当前runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。

13、runloop与线程的关系?runloop的mode?runloop的作用?内部机制?

14、iOS中使用的锁、死锁的发生与避免

15、NSOperation和GCD的区别

16、OC与JS交互

17、Swift相比OC有什么优势?

18、Struct、Class的区别

19、访问控制关键字(public、open、private、filePrivate、internal)

20、OC与Swift混编

21、map、filter、reduce?map与filter的区别?

21.jpg

22、guard与defer

23、try、try?与try!

24、autoclosure:把一个表达式自动封装成闭包

25、throws与rethrows:throws另一个throws时,将前者改为rethrows

26、App启动优化策略?main函数执行前后怎么优化?

27、crash防护?

28、内存泄露问题?

主要集中在循环引用问题中,如block、NSTime、perform selector引用计数问题。

29、UI卡顿优化?

30、架构&设计模式?

31、数据结构&算法

32、计算机基础

转自:https://zhuanlan.zhihu.com/p/77789398
自己敲一遍来加深记忆。

上一篇 下一篇

猜你喜欢

热点阅读