IOS 获取父类的所有子类 全局替换类方法
来源:互联网 发布:移动数据终端 市场 编辑:程序博客网 时间:2024/06/08 16:23
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);}
原网址 :http://blog.sina.com.cn/s/blog_881ed8500102vy7g.html
0 0
- IOS 获取父类的所有子类 全局替换类方法
- 获取类的所有子类
- iOS下如何获取一个类的所有子类
- ios 通过runtime 获取类对象的所有子类
- iOS 获取一个类的所有方法
- iOS 获取一个类的所有方法
- 子类能继承父类的所有方法和状态
- 在一个程序集中获取一个类的所有子类
- C++中子类获取父类的方法,模板实现
- 泛型子类获取父类的模板类型方法
- php获取分类下面的所有子类方法
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- 当两个类构成继承关系时,子类是否必须重写父类的所有方法?
- java中,子类能不能继承父类的所有方法和状态?
- 子类将继承父类所有的数据域和方法
- 里氏代换 -- 子类可以替换父类
- php无限分类根据顶类获取所有子类
- Python和wxpython小问题
- Codeforces 83B Doctor(二分)
- C语言中运算符优先级记忆方法
- 每个架构师都应该研究下康威定律
- 数组名,数组指针的区别:
- IOS 获取父类的所有子类 全局替换类方法
- Android M版本中gpio几种常见设定的pinctrl配置
- POJ2785
- 装饰和继承
- linux 用户和组管理
- 大数据与数据脱敏
- 显示与隐藏软键盘
- appium第一个脚本
- Log4net使用