runTime(二)
我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! 首先,第一个问题, OC :
[[MJPerson alloc] init] runtime : objc_msgSend(objc_msgSend(“MJPerson”,“alloc”),“init”) 第二个问题
@interface PYPerson : NSObject @property (nonatomic,assign) int age; @property (nonatomic,assign) int height; @property (nonatomic,copy) NSString *name; @property (nonatomic,assign) int age2; @property (nonatomic,assign) int height2; @property (nonatomic,assign) int age3; @property (nonatomic,assign) int height3; @property (nonatomic,assign) int age4; @property (nonatomic,assign) int height4; @end PYPerson.m
#import "PYPerson.h" @implementation PYPerson (void)encodeWithCoder:(NSCoder )encoder { <span style="white-space:pre"> </span>unsigned int count = 0; <span style="white-space:pre"> </span>Ivar ivars = class_copyIvarList([PYPerson class],&count); <span style="white-space:pre"> </span>for (int i = 0; i<count; i++) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>// 取出i位置对应的成员变量 <span style="white-space:pre"> </span>Ivar ivar = ivars[i]; <span style="white-space:pre"> </span>// 查看成员变量 <span style="white-space:pre"> </span>const char *name = ivar_getName(ivar); <span style="white-space:pre"> </span>// 归档 <span style="white-space:pre"> </span>NSString *key = [NSString stringWithUTF8String:name]; <span style="white-space:pre"> </span>id value = [self valueForKey:key]; <span style="white-space:pre"> </span>[encoder encodeObject:value forKey:key]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>free(ivars); } (id)initWithCoder:(NSCoder *)decoder { <span style="white-space:pre"> </span>if (self = [super init]) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>unsigned int count = 0; <span style="white-space:pre"> </span>Ivar *ivars = class_copyIvarList([PYPerson class],&count); <span style="white-space:pre"> </span>for (int i = 0; i<count; i++) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>// 取出i位置对应的成员变量 <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>Ivar ivar = ivars[i]; <span style="white-space:pre"> </span> // 查看成员变量 <span style="white-space:pre"> </span> const char *name = ivar_getName(ivar); <span style="white-space:pre"> </span> // 归档 <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> NSString *key = [NSString stringWithUTF8String:name]; <span style="white-space:pre"> </span> id value = [decoder decodeObjectForKey:key]; <span style="white-space:pre"> </span> // 设置到成员变量身上 <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> [self setValue:value forKey:key]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>free(ivars); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return self; } @end 这样我们可以看到归档和解档的案例其实是runtime写下的 学习,runtime机制首先要了解下面几个问题
2> 相关应用
3> 相关函数
4.必备常识 也许,看到这里,你是否对runtime有了更深入的了解呢?在这里,希望我们大家相互交流!有什么错误之处,还请指正 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |