码迷,mamicode.com
首页 > 其他好文 > 详细

runtime的意义

时间:2017-10-02 09:39:03      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:sage   port   class   语言   val   时代   ati   elf   对象   

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 (sel=@selector(eat))
class_addMethods([self class],sel,aaaa,"v@:")
 
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的意义

标签:sage   port   class   语言   val   时代   ati   elf   对象   

原文地址:http://www.cnblogs.com/xiaohuihui-/p/7618370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!