美文网首页
iOS 组件化方案 —— 启动流程

iOS 组件化方案 —— 启动流程

作者: 大成小栈 | 来源:发表于2023-06-20 12:01 被阅读0次

    AppDelegateModule 组件主要负责实现 hook AppDelegate

    页面容器、第三方SDK初始化等工作需要在启动时完成,我们通过 hook AppDelegate,将入口所做的工作交给一个组件完成,在该组件中注册其它需要在启动时调用 AppDelegate 方法的组件,让每个组件都可以拥有一类似 didFinishLaunchingWithOptions 方法。

    DJMainModule 组件为整个业务启动的入口

    将需要调用 appdelegate 方法的组件,在 MainModule 中注册;
    这里的 modules 是个数组,可解决调用 delegate 方法的顺序问题。

     + (void) load {
        // 注册组件
        // NSArray *modules = @[@“MainModule”, @“需要调用的组件”];
    
        NSArray *modules = @[@"DJOldSchoolModule"];
        NSString *url = @"router://AppDelegateModule/setDidFinishLaunchingModules";
        [JDRouter openURL:url arg:modules error:nil completion:nil];
        
        // 执行AppDelegateModule的run
        NSString *urlrun = @"router://AppDelegateModule/run";
        [JDRouter openURL:urlrun arg:nil error:nil completion:nil];
    }
    

    DJOldSchoolModule 组件,中转模块

    1)监听AppDelegateModule生命命周期并实现相应方法,并间接调用launchModule;
    2)封装跳转协议router://DJOldSchoolModule/jumpAgreement,统一跳转逻辑;
    3)接受外部通知调起等事件的协议解析、转发工作;
    4)App资源的统一处理等。

    launchModule组件为开屏页、rootTabController等处理

    在 launchModule 中实现 AppDelegate 的方法:

    static UIWindow *gWindow = nil;
    static UIViewController *gTempViewController = nil;
    
    // 把实例方法改为类方法
    + (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
        gWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];   
        [[[UIApplication sharedApplication] delegate] setWindow:gWindow];    
        gTempViewController = [[UIViewController alloc] init];   
        gTempViewController.view.backgroundColor = [UIColor redColor];   
        gWindow.rootViewController = gTempViewController;   
        [gWindow makeKeyAndVisible];   
        return YES;
    }
    

    至此,启动流程已经串通,简单的组件化架构雏形也已经有了。

    相关文章

      网友评论

          本文标题:iOS 组件化方案 —— 启动流程

          本文链接:https://www.haomeiwen.com/subject/wkyyydtx.html