您的位置:首页 > 运维架构

class_copyIvarList和class_copyMethodList

2015-11-02 12:20 204 查看
直接看代码吧

Dog.h

#import <Foundation/Foundation.h>

@interface Dog : NSObject

@property(nonatomic, strong) NSString * dogName;
@property(nonatomic, assign) NSInteger dogAge;

@end
Dog.m

#import "Dog.h"

@interface Dog ()

@property(nonatomic, strong) NSString * dogSex;

@end

@implementation Dog

- (instancetype)init
{
self = [super init];
if (self) {
self.dogName = @"dahuang";
self.dogAge = 2;
}
return self;
}

- (void) printDogName
{
NSLog(@"dogName");
}

@end

测试代码:

#import "ViewController.h"
#import <objc/runtime.h>
#import <objc/message.h>
#import "Person.h"
#import "Dog.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

Dog * dog = [[Dog alloc] init];

unsigned int outCount = 0;

unsigned int outCountMethod = 0;

Ivar * ivars = class_copyIvarList([dog class], &outCount);

Method * methods = class_copyMethodList([dog class], &outCountMethod);

for (int i = 0; i<outCount; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i];

// 查看成员变量
const char *name = ivar_getName(ivar);

NSLog(@"%s", name);
}

for (int j = 0; j < outCountMethod; j++) {

Method method = methods[j];

SEL methodSEL = method_getName(method);

const char * selName = sel_getName(methodSEL);

if (methodSEL) {
NSLog(@"sel------%s", selName);
}
}

}

输出:

2015-11-02 12:18:07.851 02-runtime[1970:51391] _dogName
2015-11-02 12:18:07.852 02-runtime[1970:51391] _dogAge
2015-11-02 12:18:07.853 02-runtime[1970:51391] _dogSex
2015-11-02 12:18:07.853 02-runtime[1970:51391] sel------setDogName:
2015-11-02 12:18:07.854 02-runtime[1970:51391] sel------setDogAge:
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------printDogName
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------dogName
2015-11-02 12:18:07.855 02-runtime[1970:51391] sel------dogAge
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------dogSex
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------setDogSex:
2015-11-02 12:18:07.856 02-runtime[1970:51391] sel------.cxx_destruct
2015-11-02 12:18:07.857 02-runtime[1970:51391] sel------init
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息