runtime的意义

Posted gaogaihui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了runtime的意义相关的知识,希望对你有一定的参考价值。

runtime:是运行时机制,oc特有
编译时:不会检查方法是否真实实现
运行时:才会知道
c语言不同:编译时就知道
 
 
 具体实现:
Person*p=[Person alloc]init]
[p eat];
调用方法的本质是:消息发送机制,运行时机制
底层实现是:
[p performSelector:@selector(eat)];
它的再底层是:
 
runtime运行时代码
objc_msgSend(p,@selector(eat));
objc_msgSend([person class],@selector(eat));
 
 
方法交换:
class_getClassMethods([UIImage class],@selector(imageNamed));
class_getClassMethods([UIImage class],@selector(xm_imageNamed));
 
class_exchangeIMpleation(methods1,methods2)
 
 
运行时添加方法:
 
[self performSelector:@selector(run)];run方法未实现
 
+(bool)resloveWithInstance:sel
{
class_addMethods([self class],sel,aaaa,"[email protected]:")
 
return . methods;
}
 
void . aaaa(id self , _cmd, id num)
{
}
 
运行时添加属性:
1.给已经存在的类添加分类object file --category,在分类里面添加属性,
2.在实现的方法里面:
设置set方法:调用objc_setAssociatedobject(self,@"name‘,nameOBJC_ASSOCIATTION_RETAIN_NONATOMIC)产生关联
3个参数的意义:给哪个对象添加,key是,value是
设置get方法:调用objc_getAssociatedobject(self,@"name")返回值
2个参数的意义:返回哪个对象的哪个key对应的值
3.添加头文件#import 《objc/message》
 
objc_setAssociatedobject(self, id key(@"name",value(name),OBJC_ASSOCIATTION_RETAIN_NONATOMIC))
onjc_getAssociatedbject(self, id key (@"name"))
 
 
 

以上是关于runtime的意义的主要内容,如果未能解决你的问题,请参考以下文章

iOS Runtime原理及使用

Runtime 介绍

(转)iOS-Runtime知识点整理

java.lang.Runtime.exec() Payload

Runtime objc4-723 Tagged Pointer & 对象初始化流程

iOS开发runtime学习:一:runtime简介与runtime的消息机制