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
{
if ([email protected](eat))
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的意义的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.Runtime.exec() Payload