/// 获取属性
/// @param class <#class description#>
- (void)getProperty:(Class)class
{
unsigned int count = 0;
Ivar *members = class_copyIvarList(class, &count);
for(int i = 0; i < count; i++)
{
Ivar ivar = members[i];
const char *memberName = ivar_getName(ivar);
const char *memberType = ivar_getTypeEncoding(ivar);
//依次打印属性名称和属性类型
NSLog(@"%s : %s", memberName, memberType);
// if(strcmp(memberName, "_title") == 0) {
// // 修改前
// NSString *name = (NSString *)object_getIvar(vc, members[i]);
// NSLog(@"-name:%@", name);
// // 修改后
// object_setIvar(vc, members[i], @"Hello");
// NSString *nameReset = (NSString *)object_getIvar(vc, members[i]);
// NSLog(@"-nameReset:%@", nameReset);
// break;
// }
}
free(members);
}
/// 获取实例方法
/// @param class <#class description#>
- (void)getMethod:(Class)class
{
unsigned int count;
Method *methods = class_copyMethodList(class, &count);
for (int i = 0; i < count; i++)
{
Method method = methods[i];
SEL selector = method_getName(method);
NSString *name = NSStringFromSelector(selector);
NSLog(@"实例方法:%@",name);
}
free(methods);
}
/// 获取类方法
/// @param class <#class description#>
- (void)getClassMethod:(Class)class
{
unsigned int count;
Method *classMethods = class_copyMethodList(class, &count);
for (int i = 0; i < count; i++)
{
Method classMethod = classMethods[i];
SEL selector = method_getName(classMethod);
NSString *name = NSStringFromSelector(selector);
NSLog(@"类方法:%@",name);
}
free(classMethods);
}
/// 获取代理方法
/// @param protocol <#protocol description#>
- (NSArray<NSString *> *)methodListWithProtocol:(Protocol *)protocol {
unsigned int count = 0;
NSMutableArray<NSString *> *methodList = @[].mutableCopy;
struct objc_method_description *methods = protocol_copyMethodDescriptionList(protocol, YES, YES, &count);
for (unsigned int i = 0; i < count; i++)
{
struct objc_method_description method = methods[i];
NSString *name = NSStringFromSelector(method.name);
[methodList addObject:name];
}
free(methods);
return methodList;
}
iOS获取类的属性,实例方法,类方法,代理
最新推荐文章于 2023-03-20 20:35:43 发布