博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS运行时 归档
阅读量:4538 次
发布时间:2019-06-08

本文共 2209 字,大约阅读时间需要 7 分钟。

runtime是属于OC的底层,可以进行一些非常底层的操作(用OC无法实现的,或者说不好实现)eg

相关的头文件
// #import <objc/runtime.h>
// #import <objc/message.h>//消息发送机制,可以直接用底层函数,进行消息发送
// 相关函数
// msg_send:给对象发送消息,来自<objc/message.h>
// class_copyMethodList,遍历某个类中所有的方法,来自<objc/runtime.h>
//#pragma mark 实例变量方法是什么意思
// class_copyIvarList,遍历某个类中所有的实例变量的方法,来自<objc/runtime.h>

// 运行时必备常识:

// 1.Ivar:成员变量的意思
// 2.Method:成员方法的意思
// 3.property:属性

运行时归档,不用担心后期类增加属性,忘记添加归档

#import 
@interface Person : NSObject
@property (nonatomic, strong) NSArray *picUrls;@property (nonatomic, copy) NSString *className;@property (nonatomic, assign) float score;@property (nonatomic, strong) NSNumber *number;- (void)demo;@end

 

Person.m文件

 

#import "Person.h"#import 
@implementation Person{ int _age; double _height; NSString *_name;}- (void)test{ NSLog(@"%s", __func__);}- (void)demo{ NSLog(@"%s", __func__);}/* - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.picUrls forKey:@"picUrls"]; [encoder encodeObject:@(self.score) forKey:@"score"]; [encoder encodeObject:self.className forKey:@"className"]; } - (id)initWithCoder:(NSCoder *)decoder { if (self = [super init]) { self.picUrls = [decoder decodeObjectForKey:@"picUrls"]; self.score = [[decoder decodeObjectForKey:@"score"] doubleValue]; self.className = [decoder decodeObjectForKey:@"className"]; } return self; } */-(void)encodeWithCoder:(NSCoder *)aCoder{ unsigned int count = 0; //1.取出所有的属性 objc_property_t *propertes = class_copyPropertyList([self class], &count); //2.遍历的属性 for (int i=0; i

 

 

 

 

 

 

 

延伸一下 runtime的使用

 

在控制器中我们可以测试用运行时获取 Person的实例变量,属性 ,私有和公开的方法

 

#import "ViewController.h"#import "Person.h"#import 
@interface ViewController (){ unsigned int couont;}@end@implementation ViewController-(void)viewDidLoad{ [super viewDidLoad]; couont = 0;}-(void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{ //1.获取Person中所有的方法名称 [self test4];}//1.获取Person中所有的方法名称-(void)test1{ /** * 第一参数:需要获取的类 第二个参数:获取到的个数 */ Method *methds = class_copyMethodList([Person class], &couont); for (int i=0; i

 

转载于:https://www.cnblogs.com/KingQiangzi/p/7234334.html

你可能感兴趣的文章
Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用...
查看>>
c# Winform 开发分屏显示应用程序
查看>>
canvas刮奖
查看>>
添加源ubuntu_x64 安装 Adobe Reader
查看>>
给datalist加自动编号(解决博客的第XX楼)
查看>>
BZOJ3282: Tree (LCT模板)
查看>>
ES6中变量的解构赋值
查看>>
数据绑定控件Reperter
查看>>
【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
查看>>
Yii DataProvider
查看>>
BestCoder Round #14 B 称号 Harry And Dig Machine 【TSP】
查看>>
hdu 1114 Piggy-Bank
查看>>
maven集成tomcat插件启动报错
查看>>
Boost库编译安装
查看>>
算法复习——数位dp(不要62HUD2089)
查看>>
Spark2.1.0——运行环境准备
查看>>
noip模拟赛 寻宝之后
查看>>
ZOJ2833*(并查集)
查看>>
外连接简要总结
查看>>