面试题目

面试题目//www.greatytc.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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容