iOS面试-runtime相关

什么是runtime?

runtime 一套c/c++、汇编形成的API,为Objective-C提供运行时功能。能够将数据类型的确定由编译期推迟到运行时。

ro: read-only在编译期就确定
rw: read-write在运行时确定

如:extensioncategory的区别
extension在编译期就作为类的一部分直接编译,数据就已经写入ro

方法的本质是什么?

方法的本质是发送消息。发送消息有以下几个流程:

  • 快速查找(objc_msgSend),从缓存(cache_t)中查找
  • 慢速查找,递归self、superlookUpImpOrForward
  • 找不到方法,动态方法解析
+ (BOOL)resolveInstanceMethod:(SEL)sel
+ (BOOL)resolveClassMethod:(SEL)sel
  • 消息转发
- (id)forwardingTargetForSelector:(SEL)aSelector
  • 消息签名、分发
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
- (void)forwardInvocation:(NSInvocation *)anInvocation

SEL是什么?IMP是什么?两者有什么联系?

SEL是方法编号,即方法名称,在dyld加载镜像时,通过read_image方法加载到内存的表中了

IMP 是函数实现指针,找IMP就是找函数的过程

你可能感兴趣的:(iOS面试-runtime相关)