@@ -43,12 +43,12 @@ + (void)load {
4343}
4444
4545
46- void llDynamicIMP (id vc,SEL _cmd) {
46+ void llDynamicIMP (id vc, SEL _cmd, BOOL newValue ) {
4747 struct objc_super superClazz = {
4848 .receiver = vc,
4949 .super_class = class_getSuperclass (object_getClass (vc))
5050 };
51- ((void (*)(void *, SEL ))objc_msgSendSuper)(&superClazz, _cmd);
51+ ((void (*)(void *, SEL , BOOL ))objc_msgSendSuper)(&superClazz, _cmd, newValue );
5252 [LLDynamicLaunchScreen backupSystemLaunchImage ];
5353
5454 // 还原isa对象(Restore isa object)
@@ -68,41 +68,44 @@ void llDynamicIMP(id vc,SEL _cmd) {
6868static NSString *_oldClassName = nil ;
6969// / 通过KVO在第一个VIewController执行viewDidLoad后执行自定义方法(Use KVO to execute a custom method before the first VIewController executes viewDidLoad)
7070+ (void )didBecomeKey : (NSNotification *)noti {
71+
7172 UIWindow *window = noti.object ;
7273
7374 if (CGRectEqualToRect (window.frame , UIScreen.mainScreen .bounds ) == NO ||
7475 window.hidden == YES ) {
7576 return ;
7677 }
7778
78- UIViewController *currentVC = window.rootViewController ;
79- if ([currentVC isKindOfClass: UITabBarController.class]) {
80- UITabBarController *t_tabBarController = (UITabBarController *)currentVC;
81- currentVC = t_tabBarController.selectedViewController ;
82- if ([currentVC isKindOfClass: UINavigationController.class]) {
79+ [self launchImageIsNewVersion: ^{
80+ UIViewController *currentVC = window.rootViewController ;
81+ if ([currentVC isKindOfClass: UITabBarController.class]) {
82+ UITabBarController *t_tabBarController = (UITabBarController *)currentVC;
83+ currentVC = t_tabBarController.selectedViewController ;
84+ if ([currentVC isKindOfClass: UINavigationController.class]) {
85+ UINavigationController *t_nav = (UINavigationController *)currentVC;
86+ currentVC = t_nav.topViewController ;
87+ }
88+ } else if ([currentVC isKindOfClass: UINavigationController.class]) {
8389 UINavigationController *t_nav = (UINavigationController *)currentVC;
8490 currentVC = t_nav.topViewController ;
8591 }
86- } else if ([currentVC isKindOfClass: UINavigationController.class]) {
87- UINavigationController *t_nav = (UINavigationController *)currentVC;
88- currentVC = t_nav.topViewController ;
89- }
90-
91- Method method = class_getInstanceMethod (currentVC.class , NSSelectorFromString (@" viewDidLoad" ));
92- NSString *oldClassName = NSStringFromClass (currentVC.class );
93- _oldClassName = oldClassName;
94- NSString *kvoClassName = [@" LLDynamicKVO_" stringByAppendingString: oldClassName];
95- Class kvoClass;
96- kvoClass = objc_lookUpClass (kvoClassName.UTF8String );
97- if (!kvoClass) {
98- kvoClass = objc_allocateClassPair (currentVC.class , kvoClassName.UTF8String , 0 );
99- objc_registerClassPair (kvoClass);
100- }
92+
93+ Method method = class_getInstanceMethod (currentVC.class , NSSelectorFromString (@" viewDidAppear:" ));
94+ NSString *oldClassName = NSStringFromClass (currentVC.class );
95+ _oldClassName = oldClassName;
96+ NSString *kvoClassName = [@" LLDynamicKVO_" stringByAppendingString: oldClassName];
97+ Class kvoClass;
98+ kvoClass = objc_lookUpClass (kvoClassName.UTF8String );
99+ if (!kvoClass) {
100+ kvoClass = objc_allocateClassPair (currentVC.class , kvoClassName.UTF8String , 0 );
101+ objc_registerClassPair (kvoClass);
102+ }
101103
102- if (method) {
103- class_addMethod (kvoClass,NSSelectorFromString (@" viewDidLoad" ), (IMP )llDynamicIMP, " v@" );
104- }
105- object_setClass (currentVC, kvoClass);
104+ if (method) {
105+ class_addMethod (kvoClass,NSSelectorFromString (@" viewDidAppear:" ), (IMP )llDynamicIMP, " v@:B" );
106+ }
107+ object_setClass (currentVC, kvoClass);
108+ } identifier: NSStringFromSelector (@selector (didBecomeKey: ))];
106109
107110 [NSNotificationCenter .defaultCenter removeObserver: self name: UIWindowDidBecomeKeyNotification object: nil ];
108111}
@@ -151,6 +154,7 @@ + (void)initialization {
151154 [versionDictionary setObject: @" YES" forKey: NSStringFromSelector (@selector (initialization ))];
152155 [versionDictionary setObject: @" YES" forKey: NSStringFromSelector (@selector (backupSystemLaunchImage ))];
153156 [versionDictionary setObject: @" YES" forKey: NSStringFromSelector (@selector (repairException ))];
157+ [versionDictionary setObject: @" YES" forKey: NSStringFromSelector (@selector (didBecomeKey: ))];
154158
155159 [NSUserDefaults .standardUserDefaults setObject: versionDictionary.copy forKey: launchImageVersionIdentifier];
156160
0 commit comments