【面试题】Category 相关
Category 的实现原理
graph TB subgraph objc4 subgraph objc-os.mm A[_objc_init] D[map_images_nolock] end subgraph objc-runtime-new.mm C[map_images] E[_read_images] F[load_categories_nolock] G[attachCategories] end subgraph objc-runtime-new.h H[attachLists] I[struct category_t] end end subgraph dyld B[_dyld_objc_notify_register] end A-->B B-->C C-->D D-->E E-->F F-->G G-->H
【面试题】+load 相关
【面试题】KVO 相关
KVO 的实现原理
以对 JQObject
对象的 foo
属性进行 KVO
监听为例:
KVO 会在运行时生成
NSKVONotifying_JQObject
类:NSKVONotifying_JQObject
类继承自JQObject
;- 并替换父类
JQObject
的setFoo:
方法实现为(Foundation __NSSetXXXValueAndNotify)
其中 XXX 为监听属性类型; - 然后重写
class
方法,返回JQObject
; - 重写
dealloc
方法,在对象销毁时做一些清理操作; - 重写
NSObject
的_isKVOA
方法,并返回 YES。
将监听对象的 isa 指针指向
NSKVONotifying_JQObject
类对象;将监听对象的 superclass 指针指向
JQObject
对象;
【面试题】runtime 相关
用 yarn 代替 npm 管理 React-Native 包依赖
首先得安装 yarn,可参考Yarn Installation on macOS
在命令行中输入:
$ yarn global add react-native-cli