iOS的一些个人总结

来源:互联网 发布:淘宝发货清单软件 编辑:程序博客网 时间:2024/06/05 00:47

iOS个人总结

1. iOS消息转发的实现

消息转发的主要过程如下:

这里写图片描述

当向一个对象发送一个消息,首先会在这个类及其父类的该死列表中查找该方法的实现,如果不能查找到该方向的实现,则进入动态方法解析的过程,这个过程将会调用resolveInstanceMethod,这个方法将会给类使用objc_addMethod动态添加方法的机会,如果运行时(Runtime)找到对应用SEL的IML实现,则调用,否则将进入下一个阶段,即快速转发阶段,使用

 - (id)forwardingTargetForSelector:(SEL)aSelector

流程到了这里,系统给了个将这个SEL转给其他对象的机会。

返回参数是一个对象,如果这个对象非nil、非self的话,系统会将运行的消息转发给这个对象执行。否则,继续查找其他流程。

 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector

这个函数和后面的forwardInvocation:是最后一个寻找IML的机会。这个函数让重载方有机会抛出一个函数的签名,再由后面的forwardInvocation:去执行。

- (void)forwardInvocation:(NSInvocation *)anInvocation

真正执行从methodSignatureForSelector:返回的NSMethodSignature。在这个函数里可以将NSInvocation多次转发到多个对象中,这也是这种方式灵活的地方。(forwardingTargetForSelector只能以Selector的形式转向一个对象)

2. RunLoop的实现

RunLoop的实现简单来说就是在线程中实现了一个do-while的的死循环,不断接收用户输入,在内部接收及分发相应的事件

function loop() {    initialize();    do {        var message = get_next_message();        process_message(message);    } while (message != quit);}
0 0
原创粉丝点击