美文网首页
面试题目

面试题目

作者: iOS小吴 | 来源:发表于2019-02-20 15:50 被阅读0次

    面试题目https://www.jianshu.com/p/c4ec36af8dad

    _objc_msgForward函数是做什么的,直接调用它将会发生什么?

    _objc_msgForward是 IMP 类型,用于消息转发的:当向一个对象发送一条消息,但它并没有实现的时候,_objc_msgForward会尝试做消息转发。(注意)直接调用_objc_msgForward是非常危险的事,如果用不好会直接导致程序Crash

    runtime 如何实现 weak 变量的自动置nil?

    runtime对注册的类会进行布局,对于 weak 对象会放入一个 hash 表中用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil。

    runloop和线程有什么关系?

    RunLoop 的作用就是来管理线程的,当线程的 RunLoop 开启后,线程就会在执行完任务后,处于休眠状态,随时等待接受新的任务,而不是退出。

    runloop的mode作用是什么?

    model (5个model)主要是用来指定事件在运行循环中的优先级的

    以+ scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?

    简单的说就是切换runloop的mode类型--[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    runloop内部是如何实现的?

    本质:内部就是 do-while 循环,在这个循环内部不断地处理各种事件(任务),比如:Source、Timer、Observer;每条线程都有唯一一个 RunLoop 对象与之对应,主线程的 RunLoop 默认已经启动子线程的 RunLoop 需要手动启动;每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode,

     苹果是如何实现autoreleasepool的?

    autoreleasepool 以一个栈的形式实现,主要通过下列三个函数完成.

    1:objc_autoreleasepoolPush

    2:objc_autoreleasepoolPop

    3:objc_aurorelease

    相关文章

      网友评论

          本文标题:面试题目

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