#import
typedef NSArray GLStringArray;
typedef NSMutableArray GLStringMutableArray;
//@compatibility_alias GLStringMutableArray NSMutableArray;
@interface NSObject (GL)
//变量
@property (nonatomic, class,readonly) GLStringArray * instanceVarNames;
//方法
@property (nonatomic, class,readonly) GLStringArray * instanceMethodNames;
@property (nonatomic, class,readonly) GLStringArray * classMethodNames;
//属性
@property (nonatomic, class,readonly) GLStringArray * propertyNames;
@end
#import "NSObject+GL.h"
#import
@implementation NSObject (GL)
+ (GLStringArray *)instanceVarNames{
unsigned int m = 0;
Ivar * ivarList = class_copyIvarList([self class], &m);
GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
for (int i = 0; i < m; i ++) {
Ivar ivar = ivarList[i];
const char * name = ivar_getName(ivar);
NSString * str = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
if (str) {
[array addObject:str];
}
}
return array.copy;
}
+ (GLStringArray *)instanceMethodNames{
return [self gl_methodNamesWithClass:[self class]];
}
+ (GLStringArray *)classMethodNames{
return [self gl_methodNamesWithClass:object_getClass(self)];
}
+ (GLStringArray *)propertyNames{
unsigned int m = 0;
objc_property_t * propertyList = class_copyPropertyList([self class], &m);
GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
for (int i = 0; i < m; i ++) {
objc_property_t property = propertyList[i];
const char * name = property_getName(property);
NSString * str = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
if (str) {
[array addObject:str];
}
}
return array.copy;
}
#pragma mark - private
+ (GLStringArray *)gl_methodNamesWithClass:(Class)aClass{
unsigned int m = 0;
Method * methodList = class_copyMethodList(aClass, &m);
GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
for (int i = 0; i < m; i ++) {
Method method = methodList[i];
SEL sel = method_getName(method);
[array addObject:NSStringFromSelector(sel)];
}
return array.copy;
}
@end