面试题目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