runtime--获取对应类的变量及属性

测试代码

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

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    Dog * dog = [[Dog alloc] init];
    NSLog(@"********所有变量/值:\n%@", [self getAllIvar:dog]);
    NSLog(@"********所有属性:\n%@", [self getAllProperty:dog]);
    NSLog(@"********所有方法:\n%@", [self getAllMethod:dog]);
    
//    UITabBar *tabItem = [[UITabBar alloc] init];
//    NSLog(@"********所有变量/值:\n%@", [self getAllIvar:tabItem]);
//    NSLog(@"********所有属性:\n%@", [self getAllProperty:tabItem]);
//    NSLog(@"********所有方法:\n%@", [self getAllMethod:tabItem]);
}

//获得所有变量
- (NSArray *)getAllIvar:(id)object
{
    NSMutableArray *array = [NSMutableArray array];
    
    unsigned int count;
    Ivar *ivars = class_copyIvarList([object class], &count);
    for (int i = 0; i < count; i++) {
        Ivar ivar = ivars[i];
        const char *keyChar = ivar_getName(ivar);
        NSString *keyStr = [NSString stringWithCString:keyChar encoding:NSUTF8StringEncoding];
        @try {
            id valueStr = [object valueForKey:keyStr];
            NSDictionary *dic = nil;
            if (valueStr) {
                dic = @{keyStr : valueStr};
            } else {
                dic = @{keyStr : @"值为nil"};
            }
            [array addObject:dic];
        }
        @catch (NSException *exception) {}
    }
    return [array copy];
}

//获得所有属性
- (NSArray *)getAllProperty:(id)object
{
    NSMutableArray *array = [NSMutableArray array];
    
    unsigned int count;
    objc_property_t *propertys = class_copyPropertyList([object class], &count);
    for (int i = 0; i < count; i++) {
        objc_property_t property = propertys[i];
        const char *nameChar = property_getName(property);
        NSString *nameStr = [NSString stringWithCString:nameChar encoding:NSUTF8StringEncoding];
        [array addObject:nameStr];
    }
    return [array copy];
}

// 获得所有方法
- (NSArray *)getAllMethod:(id)object
{
    NSMutableArray *array = [NSMutableArray array];
    
    unsigned int count;
    Method *methods = class_copyMethodList([object class], &count);
    for (int i = 0; i < count; i++) {
        Method method = methods[i];
        SEL methodSEL = method_getName(method);
        const char * selName = sel_getName(methodSEL);
        NSString *methodStr = [NSString stringWithCString:selName encoding:NSUTF8StringEncoding];
        [array addObject:methodStr];
    }
    return [array copy];
}

@end



测试类

#import <UIKit/UIKit.h>

@interface Dog : NSObject

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

@end

#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

打印结果:

2016-11-23 15:49:45.782 Runtime[2082:1247053] ********所有变量/值:
(
        {
        "_dogName" = dahuang;
    },
        {
        "_dogAge" = 2;
    },
        {
        "_dogSex" = "\U503c\U4e3anil";
    }
)
2016-11-23 15:49:45.782 Runtime[2082:1247053] ********所有属性:
(
    dogSex,
    dogName,
    dogAge
)
2016-11-23 15:49:45.782 Runtime[2082:1247053] ********所有方法:
(
    "setDogName:",
    "setDogAge:",
    printDogName,
    dogName,
    dogAge,
    dogSex,
    "setDogSex:",
    ".cxx_destruct",
    init
)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值