runtime学习

2018-07-31  本文已影响7人  06f43b0b52f7

美团技术团队iOS学习:https://tech.meituan.com/DiveIntoCategory.html

runtime学习网址:https://www.cnblogs.com/ioshe/p/5489086.html

首先从runtime的数据结构

1 SEL

2 id

Class

Class super_class
const char *name
long version
long info
long instance_size
struct objc_ivar_list   *ivars
struct objc_methodlist  *methodList
struct  objc_cache *cache
struct objc_protocol_list *protocols

objc_ivar_list结构体用来存储成员变量的列表 ,而objc_ivar 则是存储了单个成员变量的信息;同理objc_method_list结构体存储着方法数组的列表,而单个方法的信息则由objc_method结构体存储

objc_method 存储了方法名,方法类型,方法实现

Ivar

typedef struct objc_ivar *Ivar;

struct  objc_ivar {
 char *ivar_name
char *ivar_type
int  ivar_offset//是基地址偏移字节

}

IMP

IMP在objc.h中的定义是:
typedef id(*IMP)(id,SEL,...);
它是一个函数指针

运行时学习

  1. 转自:https://blog.csdn.net/gx_wqm/article/details/51443267

内容

通过类名获得类的属性变量。

通过类名获得类的实例变量。

class_copyPropertyList获得的是由@property修饰过的变量,

class_copyIvarList获得的是class_copyPropertyList修饰的以及在m文件的中@implementation内定义的变量

eg:

//.h


@interface Model : NSObject



@property (nonatomic,copy) NSString *sex;

@property (nonatomic,copy) NSString *name;

@property (nonatomic,assign) NSInteger age;

@property (nonatomic,strong) NSDictionary *imgCode;



@end
//.m

@interface Model ()

@property (nonatomic,copy) NSString *Id;

@end



@implementation Model {

    NSInteger _index;

}



@end
上一篇下一篇

猜你喜欢

热点阅读