前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS分布式启动框架-RZLauncher

iOS分布式启动框架-RZLauncher

作者头像
用户2814378
发布2022-11-07 15:14:51
4820
发布2022-11-07 15:14:51
举报
文章被收录于专栏:高科技宣传高科技宣传

RZLauncher

iOS启动框架,支持启动生命周期分发,启动任务分布式注册,启动任务依赖,支持设置启动任务在各生命周期的优先级,执行所在线程以及对其他启动任务的依赖。根据启动任务的依赖关系,检测循环依赖,并发执行,提升启动的效率。同时,统计各启动任务消耗的时间,暴露给外部使用。

https://github.com/ruzhuxiaogu/RZLauncher.git

接入

代码语言:javascript
复制
pod 'RZLauncher', '0.0.1'

使用指南

1.生命周期分发

代码语言:javascript
复制
  typedef NS_ENUM(NSInteger, RZLaunchLife) {
   RZLaunchLife_Load = 0,
   RZLaunchLife_Constructor,
   RZLaunchLife_WillFinishLaunching,
   RZLaunchLife_DidFinishLaunchingBeforeHomeRender,
   RZLaunchLife_DidFinishLaunchingAfterHomeRender,
   RZLaunchLife_TaskAfterLaunching,
   RZLaunchLife_AppInitialization,
   RZLaunchLife_DidBecomeActive,
   RZLaunchLife_WillEnterForeground,
   RZLaunchLife_DidEnterBackground,
   RZLaunchLife_WillResignActive,
   RZLaunchLife_HomePageDidAppear,
   RZLaunchLife_HomePageDidActive,
   RZLaunchLife_Min = RZLaunchLife_Load,
   RZLaunchLife_Max = RZLaunchLife_HomePageDidActive,
};

在AppDelegate中的启动回调中触发分发,比如:

代码语言:javascript
复制
 [[RZLauncher sharedLauncher] onTrigger:RZLaunchLife_DidBecomeActive]; 

2.启动任务注册

(1) 继承RZAppLaunchBaseTask,添加宏 RZLAUNCH_REGISTER(RZAppLaunchTaskName)。

RZLAUNCH_REGISTER(RZAppLaunchTaskName)

(2) 实现RZLaunchProtocol协议。

代码语言:javascript
复制
/*
* 任务执行之前的操作
* @param life 生命周期
*/
- (void)operateBeforeRunLaunchLife:(NSInteger)life;

/*
 * 指定每个生命周期需要执行的操作
 * @param life 生命周期
 */
- (BOOL)runForLaunchLife:(NSInteger)life;

/*
* 任务执行之后的操作
* @param life 生命周期
*/
- (void)operateAfterRunLaunchLife:(NSInteger)life;

/*
* 获取任务执行的时间
* @param life 生命周期
*/
- (CFAbsoluteTime)getOperateTime;

/*
* 是否立即执行,若为否,会先加入队列,然后执行
* @param life 生命周期
*/
- (BOOL)runImmediatelyForLaunchLife:(NSInteger)life;

@optional

/*
* 指定启动任务的前驱,前驱完成后再执行该任务
* @param life 生命周期
*/
- (NSArray <NSString *> *)runPredecessorsForLaunchLife:(NSInteger)life;

/*
* 指定启动任务的执行优先级
* @param life 生命周期
*/
- (RZLaunchPriority)priorityForLaunchLife:(NSInteger)life;

/*
* 指定实例对象
*/
+ (instancetype)launcher;

/*
* 指定启动任务的执行线程
* @param life 生命周期
*/
- (RZLaunchThread)runInThreadForLaunchLife:(NSInteger)life;

也可以通过plist注册,支持注册任务和配置任务前驱。

代码语言:javascript
复制
<dict>
  <key>RZAppLaunchTask6</key>
  <dict>
      //生命周期的枚举值
      <key>7</key>
      <array>
          <string>RZAppLaunchTask2</string>
      </array>
  </dict>
  <key>RZAppLaunchTask7</key>
  <dict>
      <key>7</key>
      <array>
          <string>RZAppLaunchTask2</string>
      </array>
  </dict>
</dict>
</plist>

RZMediator

iOS中间件,protocol-class映射模式,注册和使用起来简单,实现解耦的目的,搭配RZLauncher使用更佳。

使用指南

1.新建protocol,继承RZModuleBaseProtocol,并新建类来实现该protocol。

代码语言:javascript
复制
@protocol TestProtocol <RZModuleBaseProtocol>

- (void)test;

@end

@interface TestImpl : NSObject <TestProtocol>

@end

2.注册protocol及实现该protocol的类名

代码语言:javascript
复制
RZM_EXPORT_MODULE_PROTOCOL(TestProtocol, TestImpl)

3.使用。

代码语言:javascript
复制
[[RZModuleMediator implObjForProtocol: @protocol(TestProtocol)] test];  

示例:

代码语言:javascript
复制
#import "RZModuleMediator.h"

@protocol TestProtocol <RZModuleBaseProtocol>

- (void)test;

@end

@interface TestImpl : NSObject <TestProtocol>

@end


RZM_EXPORT_MODULE_PROTOCOL(TestProtocol, TestImpl)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RZLauncher
    • 接入
      • 使用指南
        • 1.生命周期分发
        • 2.启动任务注册
    • RZMediator
      • 使用指南
        • 1.新建protocol,继承RZModuleBaseProtocol,并新建类来实现该protocol。
        • 2.注册protocol及实现该protocol的类名
        • 3.使用。
    相关产品与服务
    消息队列 TDMQ
    消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档