测试代码
#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
)