当前位置:   article > 正文

面试题(5家2offer顺利通过)

面试题(5家2offer顺利通过)

  1. runtime
  2. nstimer
  3. block
  4. 多线程
  5. uiview和calayer
  6. 属性词
  7. 响应链
  8. kvo和kvc
  9. sdwebimage 图片渲染过程
  10. 性能优化  内存管理
  11. 数据存储
  12. 设计模式
  13. 网络层socket和http区别
  14. 响应式编程

1.runtime

调用[receiver selector];后,进行的流程:

  1. 编译阶段[receiver selector];方法被编译器转换为:

    1. Objc_msgSend(receiver, selector) --- 不带参数
    2. Objc_msdSend(receiver, selector, org1, org2, ...) --- 带参数
  2. 运行时阶段:消息接受者receiver寻找对应的selector

    1. 通过receiverisa 指针找到receiverClass (类)
    2. Class (类)cache (方法缓存)的散列表中寻找对应的IMP (方法实现)
    3. 如果在cache (方法缓存)中没有找到对应的IMP (方法实现)的话,就继续在Class (类)method list (方法列表)中找对应的selector,如果找到,填充到cache (方法缓存)中,并返回selector
    4. 如果在class (类)中没有找到这个selector,就继续在它的superclass (父类)中寻找;
    5. 一旦找到对应的selector,直接执行receiver对应的selector方法实现的IMP (方法实现)
    6. 若找不到对应的selectorRuntime系统进入消息转发机制。
  3. 运行时消息转发阶段

    1. 动态解析:通过重写+resolveInstanceMethod: 或者 +resolveClassMethod:方法,利用class_addMethod方法添加其他函数实现;
    2. 消息接受者重定向:如果上一步没有添加其他函数实现,可在当前对象中利用forwardingTargetForSelector:方法将消息的接受者转发给其他对象;
    3. 消息重定向:如果上一步返回值是nil,则利用methodSignatureForSelector:方法获取函数的参数和返回值类型。
      1. 如果methodSignatureForSelector:返回了一个NSMethodSignature对象(函数签名),Runtime系统就会创建一个NSInvocation对象,并通过forwardInvocation:消息通知当前对象,给予此次消息发送最后一次寻找IMP的机会。
      2. 如果methodSignatureForSelector:返回nil。则Runtime系统会发出doesNotRecognizeSelector:消息,程序也就崩溃了。

iOS底层探索 ---Runtime(一)--- 基础知识 - 简书

2.NSTimer

初始化有五种方法,主要掌握这两种区别。

timerWithTimeInterval和scheduledTimerWithTimeInterval的区别

scheduledTimerWithTimeInterval方法创建完timer之后,会自动以NSDefaultRunLoopModel模式加入运行循环。而timerWithTimeInterval方法创建的timer,不会自动加入运行循环,需要我们手动指定模式,并手动加入运行循环。因此,会导致一部分操作上得不同,

【点杀iOS】NSTimer的基本使用 - 杨鲁允浩 - 博客园

IOS NSTimer 定时器用法总结 - sirzhang - 博客园

3.Block

void (^blockName)(void) = ^void (void) { // ... };
blockName();
void (^blockName)(void) = ^{ // ... };
blockName();

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号