#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文件无属性)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言:如果你的项目有一个接口返回的字段超级多,而且你需要创建一个Model文件来处理业务,那么请开心的阅读本文,我...
- Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate...