1.在分类中无限扩展 成员变量 (默认情况下是不允许的)
1)person+student是 person的一个 分类
下面用 运行时 来解决这个问题 在分类中 实现 一下方法
#import "Person+student.h"
#import <objc/message.h> //添加 运行时 需要的头文件 或 #import<objc/runtime.h>
@implementation Person (student)
static double HeightKey;
-(void)setHeight:(double)height{
/**
* 设置 set 方法
* @param HeightKey 给属性的键值
* @param height 需要set的属性 包装成类,参数要求
*
* OBJC_ASSOCIATION_ASSIGN 属性数据类型
*/
objc_setAssociatedObject(self, &HeightKey, @(height), OBJC_ASSOCIATION_ASSIGN);
}
-(double)height{
return [objc_getAssociatedObject(self, &HeightKey) doubleValue];
}
@end
运行结果
2.遍历所有成员变量
person 类的 所有成员 属性
代码 如下
#import "ViewController.h"
#import "Person.h"
#import "Person+student.h"
#import <objc/runtime.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
unsigned int count=0;
//获取 peson 类的 所有成员 属性
Ivar *ivars=class_copyIvarList([Person class], &count);
//遍历所有成员 变量
for (int i=0; i<count; i++) {
Ivar ivar=ivars[i];
//变量名
const char *name=ivar_getName(ivar);
//遍历 类型
const char *type=ivar_getTypeEncoding(ivar);
NSLog(@"name=%s type=%s",name,type);
}
}
运行 结果: