美文网首页
Runtime初体验

Runtime初体验

作者: Coder东 | 来源:发表于2017-01-24 14:04 被阅读9次

Runtime介绍:

runtime官方文档字面翻译:ios中的黑魔法!!!

runtime(运行时):底层C语言的库。包含了很多的C语言的API

概念:OC在运行的过程中,都会被编译器编译成runtime运行时C语言。。

有什么用:runtime属于OC的底层实现,可以进行一些非常底层的操作(OC无法实现)

1.利用runtime在程序运行的过程中动态创建一个类

2.利用runtime,在程序运行的过程中,动态的为某个类添加属性/方法,修改属性/方法

3.遍历一个类的所有成员变量

怎么用:

头文件:    <objc/runtime>

class_copyIvarList   拷贝成员变量

class_getName  通过类获得(C语言字符)名称

<objc/message>

objc_msgSend   

objc_msgSendSuper 

两个常识:

|----Method   成员方法

|----Ivar          成员属性(变量)

应用场景:归档!

KVO:底层实现原理:利用runtime运行时的时候动态添加创建一个对象,NSKVONotifng_XX类  类名  重写 SetAge方法

[self willChangeValueForKey:@"age"];

[self didChangeValueForKey:@"age"];

unsigned int count = 0;//属性个数!!!

//    unsigned int * cut = &count;

//拷贝成员列表!!

Ivar * ivars = class_copyIvarList( NSClassFromString(@"Person"), &count);

Ivar ivar = ivars[0];

const char * name = ivar_getName(ivar);

NSString * ocName = [NSString stringWithUTF8String:name];

NSLog(@"%@",ocName);

@interface Person : NSObject

@property(copy,nonatomic) NSString *name;

@property(assign,nonatomic)NSInteger age;

end

@interface Person ()<NSCoding>

@property (nonatomic,strong)UIImage *image;

end

@implementation Person

-(void)encodeWithCoder:(NSCoder *)coder{

//归档

unsigned int count = 0;//属性个数!!!

Ivar   *ivars = class_copyIvarList ( [self class], &count);

for (int i =0 ; i < count ;i ++){

Ivar  ivar = ivars[i];

const char *name = ivar_getName(ivar);

NSString *ocName = [NSString stringWithUTF8String:name];

 [coder encodeObject:[self valueForKey:ocName] forKey:ocName];

}

//在C语言里面一旦用到了create new copy 就需要释放

free(ivars);

}

-(instancetype)initWithCoder:(NSCoder *)coder{

if(self = [super init]){

//解档 

unsigned int count = 0;//属性个数!!

Ivar *ivars = class_copyIvarList( [ self class],&count);

for(int i = 0; i< count; i++){

Ivar ivar = ivars[i];

const char *name = ivar_getName(ivar);

NSString *ocName = [NSString stringWithUTF8String:name];

id value = [coder decodeObjectForKey:ocName];

[self setValue:value forKey:ocName];

}

free(ivars);

}

return self;

}

end

相关文章

  • Runtime初体验

    Runtime介绍: runtime官方文档字面翻译:ios中的黑魔法!!! runtime(运行时):底层C语言...

  • runtime初体验一

    oc是利用ruantime的消息发送机制将oc面向对象代码转化成了c语言的面向过程代码。接下来我们先来查看一下我们...

  • runtime初体验二(实例)

    废话不多说,分享两个简单的runtime使用场景:1、在存储用户信息的时候使用的归档和解档;2、替换系统方法。归档...

  • yii初体验(7-15)

    yii初体验(7)视图 yii初体验(8)模块 yii初体验(9) 小部件widgets yii初体验(10) 前...

  • 动画篇-layout动画初体验

    动画篇-layout动画初体验 动画篇-layout动画初体验

  • iOS之RunTime探索与实践

    Runtime 概念 Runtime 相关概念 Runtime 实践 Runtime概念 Runtime简称运行时...

  • 劳动主题画报

    一、实践画报(含体验日记) _____初体验(如:记者初体验、医生初体验等) 说明: 1.利用假期亲身体验一项工作...

  • 简约不简单

    初体验

  • 体验

    初体验

  • OC -> Runtime

    Runtime简介 Runtime用处 Runtime实践 Runtime 类方法调用实现。Person * p ...

网友评论

      本文标题:Runtime初体验

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