查找当前类所有属性(不包括父类)
- (NSArray *)findProperties:(Class)class
{
unsigned int numProps;
NSMutableArray *arr = [NSMutableArray array];
objc_property_t *property = class_copyPropertyList(class, &numProps);
for(int i = 0; i < numProps; i++) {
objc_property_t prop = property[i];
NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];
[arr addObject:propName];
}
return [arr copy];
}
查找当前类所有属性(包括父类)
- (NSArray *)findAllProperties:(Class)class array:(NSMutableArray *)arr
{
if (class == [NSObject class]) {
[arr addObjectsFromArray:[self findProperties:[NSObject class]]];
return arr;
}
[arr addObject:[self findProperties:class]];
return [self findAllProperties:[class superclass] array:arr];
}
查找当前类所有成员变量(不包括父类)
- (NSArray *)findIvars:(Class)class
{
unsigned int numIvars;
NSMutableArray *arr = [NSMutableArray array];
Ivar *vars = class_copyIvarList(class, &numIvars);
for(int i = 0; i < numIvars; i++) {
Ivar iv = vars[i];
NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(iv)];
[arr addObject:ivarName];
}
return [arr copy];
}
查找当前类所有成员变量(包括父类)
- (NSArray *)findAllIvars:(Class)class array:(NSMutableArray *)arr
{
if (class == [NSObject class]) {
[arr addObjectsFromArray:[self findIvars:[NSObject class]]];
return arr;
}
[arr addObject:[self findIvars:class]];
return [self findAllIvars:[class superclass] array:arr];
}
查找当前类所有方法(不包括父类)
- (NSArray *)findMethods:(Class)class
{
unsigned int numMethods;
NSMutableArray *arr = [NSMutableArray array];
Method *methods = class_copyMethodList(class, &numMethods);
for (int i = 0; i < numMethods; i++) {
Method method = methods[i];
SEL selector = method_getName(method);
NSString *name = NSStringFromSelector(selector);
[arr addObject:name];
}
return [arr copy];
}
查找当前类所有方法(包括父类)
- (NSArray *)findAllMethods:(Class)class array:(NSMutableArray *)arr
{
if (class == [NSObject class]) {
[arr addObjectsFromArray:[self findMethods:[NSObject class]]];
return arr;
}
[arr addObject:[self findMethods:class]];
return [self findAllMethods:[class superclass] array:arr];
}
查找当前类所有协议(不包括父类)
- (NSArray *)findProtocols:(Class)class
{
unsigned int numProtocols = 0;
NSMutableArray *arr = [NSMutableArray array];
Protocol * __unsafe_unretained * protocols = class_copyProtocolList(class, &numProtocols);
for (int i = 0; i < numProtocols; i++) {
Protocol *p = protocols[i];
NSString *protocolName = [NSString stringWithUTF8String:protocol_getName(p)];
[arr addObject:protocolName];
}
return [arr copy];
}
查找当前类所有协议(包括父类)
- (NSArray *)findAllProtocols:(Class)class array:(NSMutableArray *)arr
{
if (class == [NSObject class]) {
[arr addObjectsFromArray:[self findProtocols:[NSObject class]]];
return arr;
}
[arr addObject:[self findProtocols:class]];
return [self findAllProtocols:[class superclass] array:arr];
}