iOS 面试题 -- 2017中高级篇
中级
Block
block的实质是什么?一共有几种block?都是什么情况下生成的?
为什么在默认情况下无法修改被block捕获的变量? __block都做了什么?
模拟一下循环引用的一个情况?block实现界面反向传值如何实现?
Runtime
objc在向一个对象发送消息时,发生了什么?
什么时候会报unrecognized selector错误?iOS有哪些机制来避免走到这一步?
能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
runtime如何实现weak变量的自动置nil?
给类添加一个属性后,在类结构体里哪些元素会发生变化?
RunLoop
runloop是来做什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?
runloop的mode是用来做什么的?有几种mode?
为什么把NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环以后,滑动scrollview的时候NSTimer却不动了?
苹果是如何实现Autorelease Pool的?
类结构
isa指针?(对象的isa,类对象的isa,元类的isa都要说)
类方法和实例方法有什么区别?
介绍一下分类,能用分类做什么?内部是如何实现的?它为什么会覆盖掉原来的方法?
运行时能增加成员变量么?能增加属性么?如果能,如何增加?如果不能,为什么?
objc中向一个nil对象发送消息将会发生什么?(返回值是对象,是标量,结构体)
高级
UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)
有没有用过运行时,用它都能做什么?(交换方法,创建类,给新创建的类增加方法,改变isa指针)
看过哪些第三方框架的源码?都是如何实现的?(如果没有,问一下多图下载的设计)
SDWebImage的缓存策略?
AFN为什么添加一条常驻线程?
KVO的使用?实现原理?(为什么要创建子类来实现)
KVC的使用?实现原理?(KVC拿到key以后,是如何赋值的?知不知道集合操作符,能不能访问私有属性,能不能直接访问_ivar)
附:
加我关注,了解更多iOS 开发内容。
你可能关注问题的细节,那么你可以前往 iOS招人心得答案总结