重新造轮子,写一个不阻塞启动过程的带优先级、依赖管理的启动任务管理器。
就目前iOS的客户端项目架构,组件化、面向接口基于IoC的模块化,越来越成为共识。模块的初始化、加载,及服务注册都需要合理地管理起来,同时要避免+load
方法内预处理引入不必要的启动耗时。
目前一种可选的做法是,将任务/模块信息写入Mach-O的Section中,在合适时机读取使用。一般通过__attribute__((used, section("__DATA,")))
即可将数据写入指定的Section。
1 2 3 4 5 6 7 8 9
| typedef struct _ModuleClassEntry { const void *cls; } ModuleClassEntry;
typedef struct _ModuleFuncEntry { const void *function; const char *fileName; const int line; } ModuleFuncEntry
|
以上两种是常见的两种数据格式,前者好处在于简便,后者好处在于性能。
1 2 3 4
| #define HOLORegisterStartUpTaskFunction_IMPL(FUNC_ID, ENTRY_ID) \ __attribute__((used, no_sanitize_address)) static void FUNC_ID();\ HOLO_MODULE_DATA_SECT(HOLOEntrySectionName) static const ModuleFuncEntry ENTRY_ID = (TTModuleFuncEntry){(void *)FUNC_ID, __FILE_NAME__, __LINE__};\ __attribute__((used, no_sanitize_address)) static void FUNC_ID
|
完善后将开源。
Comments