1、获取父类的所有子类
-(void)getSubclass
{
int numClasses;
Class *classes = NULL;
numClasses = objc_getClassList(NULL,0);
if (numClasses >0 )
{
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
if (class_getSuperclass(classes[i]) == [BaseTableViewController class]){
NSLog(@"%@===%@",classes[i], NSStringFromClass(classes[i]));
}
}
free(classes);
}
}
2、在添加页面统计等时,直接在父类实现添加方法,但是要读到子类的类名
比如在父类中添加友盟页面统计
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"%@",[NSString stringWithUTF8String:object_getClassName(self)]);
[MobClick beginLogPageView:[NSString stringWithUTF8String:object_getClassName(self)]];
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[MobClick endLogPageView:[NSString stringWithUTF8String:object_getClassName(self)]];
}
3、如果要实现添加统计跟踪等,除了在基类实现,还可以通过Method Swizzling来实现
首先建个UIViewController的扩展类
#import "UIViewController+Log.h"
#import
@implementation UIViewController (Log)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
// When swizzling a class method, use the following:
// Class class = object_getClass((id)self);
SEL originalSelector = @selector(viewDidAppear:);
SEL swizzledSelector = @selector(xxx_viewDidAppear:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
#pragma mark - Method Swizzling
- (void)xxx_viewDidAppear:(BOOL)animated {
[self xxx_viewDidAppear:animated];
NSLog(@"viewWillAppear: %@", self.title);
}
IOS 获取父类的所有子类 全局替换类方法
最新推荐文章于 2023-03-15 14:33:25 发布