美文网首页
iOS 技术

iOS 技术

作者: 西风飒飒 | 来源:发表于2020-03-06 11:20 被阅读0次
  1. 结构体的字节对齐和OC对象的字节对齐?
  2. instance(实例对象)、class(类对象)、meta-class(元类对象)分别储存了什么信息?为什么要设计元类?
  3. KVO的具体实现流程?访问成员变量(类似self->age)会触发KVO嘛?KVC会触发KVO嘛?KVO的两个核心调用方法是?
  • 实现流程:Apple 使用了 isa 混写(isa-swizzing)来实现 KVO。当观察对象 A 时,KVO 机制动态创建一个名为 NSKVONotifying_A 的新类,该类继承自对象 A 的本类,且 KVO 为 NSKVONotifying_A 重写观察属性的 setter 方法,setter 方法会负责在调用原 setter 方法前后,通知所有观察对象属性值的更改情况。
  • 两个核心方法:KVO的键值观察通知依赖于 NSObject 的两个方法:willChangeValueForKey:和 didChangevlueForKey:,在存取数值的前后分别调用2个方法:被观察属性发生改变之前,willChangeValueForKey:被调用,通知系统该 keyPath 的属性值即将变更;当改变发生后,didChangeValueForKey: 被调用,通知系统该 keyPath 的属性值已经变更;之后observeValueForKey:ofObject:change:context: 也会被调用。且重写观察属性的setter 方法这种继承方式的注入是在运行时而不是编译时实现的。

  1. KVC的原理?getter 和 setter 的搜索策略是什么?KVC 有什么实际的应用?
  2. Catagory 和 extension 分别的使用场合和特点是什么?
  3. Catagory 的实现原理是什么?Catagory 有哪些用处?Catagory 有什么局限?
  4. Class 和 他的 Catagory 同名方法的调用顺序是什么?Catagory A 和 Catagory B 同名方法的调用顺序是如何?如果想要不按照系统顺序执行要怎么做?
  5. +load 和 +initialize 的调用时机和顺序?两者区别是什么?
  6. Catagory 有 +load 方法么?+load 是什么时候调用的?能继承么?会覆盖Class 的 +load 么?
  7. Catagory关联对象(AssociateObject)的底层实现是什么?
  8. block 的本质是什么?block 的底层实现是怎样的?block 的变量捕获是什么原理?block 的类型有哪些?什么情况下会把栈上的 block 赋值到堆上?
    (block 我真的好多都没记住啊...)
  9. isa 指针是什么?里面有哪些特殊的位数?什么是TaggedPointer的优化?
  10. class 的底层结构是什么样的?
  11. method_t 里包含什么?
  12. super 的本质是什么?
  13. OC的消息机制有几步?
  14. 如何防止类似 unrecognized selector 的错误?_objc_msgForward能干什么?
  15. runtime 有哪些应用?方法替换(method - Swizzling)有什么缺点?如何安全的进行方法替换?
  16. RunLoop 的本质是什么?
  • RunLoop(消息循环):说白了就是一种事件监听循环。就好比是一个while循环,监听到事件就起来,没有就休息。

  1. Runloop和线程是什么关系?
  • Runloop和线程的关系:一个Runloop对应着一条唯一的线程。

  • Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建。

  • Runloop的生命周期:在第一次获取时创建,在线程结束时销毁。


  1. Runloop的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?
  • 数据结构:Runloop 对象是利用字典来进行存储,而且 key 是对应的线程,value 为该线程对应的 Runloop。
  • 运行模式:
    1、kCFRunLoopDefaultMode:App的默认运行模式,通常主线程是在这个运行模式下运行
    2、UITrackingRunLoopMode:跟踪用户交互事件(用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他Mode影响),这也是为什么iOS滑动顺滑的重要原因之一
    3、UIInitializationRunLoopMode:在刚启动App时第进入的第一个 Mode,启动完成后就不再使用
    4、GSEventReceiveRunLoopMode:接受系统内部事件,通常用不到
    5、kCFRunLoopCommonModes:伪模式,不是一种真正的运行模式
  1. Runloop 的监听状态有哪几种?
  2. Runloop 的工作流程大概是什么样的?
  3. Runloop 有哪些应用?
  4. 多线程,异步执行(async)一个performSelector 会执行么?如果加上 afterDelay呢?
  5. 你知道 iOS 有哪些锁?性能分别怎么样?
  6. 自旋锁和互斥锁怎么选择?
  7. 引用计数怎么实现的?weak怎么实现的?sideTable的 底层结构是怎么样的? weak指针做了什么操作?
  8. AutoReleasePool(自动释放池) 的底层实现是什么?他怎么实现及时释放的?子线程的释放时机是怎么样的?
  9. 对象的 release 是怎么处理的?

相关文章

网友评论

      本文标题:iOS 技术

      本文链接:https://www.haomeiwen.com/subject/paqjqctx.html