runtime

2017-01-04  本文已影响7人  crosstrack

1.存放自定义数据

数据管理三把剑:
get、set、remove ,用key 来作为存取数据的凭证

2.类的方法动态实现机制

方法存储:
选择子,oc对象的方法可视为简单c函数,原型:
<return type>Class_selector(id self, SEL _cmd,...)
方法维护:
快速缓存表:存储选择子和方法的对应关系
方法调用:
objc_msgsend(some object,@selector(),parameters)去查找快速缓存表,涉及到消息转发

3.消息转发机制:(message forwarding)


三步分别是:说,这个是不是你的? --不是我啊
啊,不是?那你说是谁的?---是A的,
A没有这个啊 -- 那是B的(把东西改装了一下,写上了b的名字塞给了B)
对应:

1.+ resolveInstanceMethod:(SEL)sel // 对应实例方法
  + resolveClassMethod:(SEL)sel // 对应类方法
2.- (id)forwardingTargetForSelector:(SEL)aSelector
3.- (void)forwardInvocation:(NSInvocation *)anInvocation

具体用法见Runtime系列(消息转发)

4.runtime 用于hook等操作

用方法调配技术调试黑盒方法-method swizzling

Method m1 = class_getInstanceMethod([p1 class], @selector(printDZL));  
Method m2 = class_getClassMethod([Person class], @selector(printDZ));    method_exchangeImplementations(m1, m2);  

这样就能在自定义的方法里,hook 住黑盒中的代码

5.swift中的runtime

以下是一些结论:

以上结论的详细解释见:Swift Runtime

上一篇 下一篇

猜你喜欢

热点阅读