#import "UIViewController+LGFVCLog.h"
@implementation UIViewController (LGFVCLog)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 如果是实例方法:
Class class = [self class];
// 如果是类方法
// Class class = object_getClass((id)self);
// 替换 viewDidLoad
SEL viewDidLoad = @selector(viewDidLoad);
SEL lgf_ViewDidLoad = @selector(lgf_ViewDidLoad);
[self lgf_MethodReplaceWithClass:class selOne:viewDidLoad selTwo:lgf_ViewDidLoad];
// 替换 dealloc
SEL dealloc = NSSelectorFromString(@"dealloc");
SEL lgf_Dealloc = @selector(lgf_Dealloc);
[self lgf_MethodReplaceWithClass:class selOne:dealloc selTwo:lgf_Dealloc];
});
}
#pragma mark - 运行时方法替换
/**
@param class 方法所属的类
@param selOne 被替换的方法
@param selTwo 替换的方法
*/
+ (void)lgf_MethodReplaceWithClass:(Class)class selOne:(SEL)selOne selTwo:(SEL)selTwo {
Method met_One = class_getInstanceMethod(class, selOne);
Method met_Two = class_getInstanceMethod(class, selTwo);
BOOL didAddMethod =
class_addMethod(class, selOne, method_getImplementation(met_Two), method_getTypeEncoding(met_Two));
if (didAddMethod) {
class_replaceMethod(class, selTwo, method_getImplementation(met_One), method_getTypeEncoding(met_One));
} else {
method_exchangeImplementations(met_One, met_Two);
}
}
- (void)lgf_ViewDidLoad {
NSLog(@"LGF控制器:%@ --- 已经走 ViewDidLoad", self);
}
- (void)lgf_Dealloc {
NSLog(@"LGF控制器:%@ --- 已经释放", self);
}
@end
好用的 UIViewController 生命周期Log输出方案(代码片段为分类.m文件.h文件无属性)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 前言:如果你的项目有一个接口返回的字段超级多,而且你需要创建一个Model文件来处理业务,那么请开心的阅读本文,我...
- Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate...