美文网首页
Runtime学习小结

Runtime学习小结

作者: 青宜结鬼章 | 来源:发表于2018-05-07 10:47 被阅读0次

感觉最近记忆越来越差,所以记录一下自己学习的东西

本文用于自己学习记录,文章参考http://www.cocoachina.com/ios/20160523/16386.html

他的git:https://github.com/daiweiping/RuntimeLearn

什么是runtime,object-c是一门动态语言,需要一个运行时系统,这就是runtime系统。

object_msgSend

在objec-c中的方法调用,不是简单的方法调用,而是消息发送,也就是说它的[receiver message]会被编译器转化为:objc_msgSend(receiver,selector)。

1,object_msgSend的使用

TestClass *objct = [[TestClass alloc] init];

    ((void(*) (id,SEL))objc_msgSend) (objct,sel_registerName("showAge"));

    ((void(*) (id,SEL,NSString*))objc_msgSend) (objct,sel_registerName("showName:"),@"Dave Ping");

    ((void(*) (id,SEL,float,float))objc_msgSend) (objct,sel_registerName("showSizeWithWidth:andHeight:"),110.5f,200.0f);

    floatf = ((float(*) (id,SEL))objc_msgSend_fpret) (objct,sel_registerName("getHeight"));

    NSLog(@"height is %.2f",f);

    NSString *info = ((NSString* (*) (id, SEL)) objc_msgSend) (objct, sel_registerName("getInfo"));

2动态方法解析

如果当前对象调用了一个不存在的方法Runtime会调用resolveInstanceMethod:来进行动态方法解析我们需要用class_addMethod函数完成向特定类添加特定方法实现的操作返回NO,则进入下一步forwardingTargetForSelector:

#if0

    return NO;

#else

    class_addMethod(self, sel, class_getMethodImplementation(self, sel_registerName("jump")), "v@1:");

    return [super resolveInstanceMethod:sel];

#endif

在消息转发机制执行前,Runtime 系统会再给我们一次重定向的机会通过重载forwardingTargetForSelector:方法来替换消息的接受者为其他对象返回nil则进步下一步forwardInvocation:

-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector{

     获取方法签名进入下一步,进行消息转发

    return [NSMethodSignature signatureWithObjCTypes:"v@:"];

}

-(void)forwardInvocation:(NSInvocation*)anInvocation{

     消息转发

    return[anInvocationinvokeWithTarget:[[Birdalloc]init]];

}

3.其他

3.1给category添加属性

3.2字典与模型互换

3.3自动归档

相关文章

  • Runtime学习小结

    感觉最近记忆越来越差,所以记录一下自己学习的东西 本文用于自己学习记录,文章参考http://www.cocoac...

  • Runtime小结

    一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...

  • runtime 小结

    isa是一个objc_class类型的指针.根据上面内存布局以一个objc_class指针为开始的所有都可以当做一...

  • Runtime小结

    在runtime中一个对象就是用结构体来表示的 runtime中的表示 获取类的属性列表 获取类的成员变量 获取类...

  • Runtime小结

    一、Runtime简介RunTime简称运行时,是一套底层的 C 语言 API。Objective-C是一门动态编...

  • runtime 小结

    OC被称之为动态运行时语言,最主要的原因就是因为两个特性,一个是运行时也就是runtime,一个是多态。 runt...

  • 【iOS小结】Runtime

    一.Runtime简介 C语言中,在编译期,函数的调用就会决定调用哪个函数。而OC的函数,属于动态调用过程,在编译...

  • Runtime使用小结

    OC方法的本质: Runtime技术的使用基于OC是一门动态语言,那么何为动态语言呢?动态语言意味着变量类型的确认...

  • Vue --- Runtime + Compiler vs. R

    学习目标:一、理解Runtime + Compiler vs. Runtime-only二、如何设置Runtime...

  • iOS~runtime

    iOS~runtime理解iOS runtime学习笔记Objective-C Runtime让你快速上手Runt...

网友评论

      本文标题:Runtime学习小结

      本文链接:https://www.haomeiwen.com/subject/fclmrftx.html