Skip to content

getManagerWithName:options:

获取功能管理器

getManagerWithName:options:SUDRT 协议中的一个实例方法,用于获取引擎内部的核心子系统管理器。该方法采用了“服务定位器”模式,允许宿主 App 通过特定的常量 Key 动态获取对应的功能模块(如用户中心、插件中心、包管理中心等),从而实现按需调用。


方法声明

objectivec
/**
 * 获取特定的管理器组件。
 * @param name 唯一标识管理器的常量字符串(见下表)。
 * @param options 获取管理器时的附加配置参数(通常传 nil)。
 * @return 对应的管理器实例对象,需根据文档强转为具体类型;若不支持则返回 nil。
 */
- (nullable NSObject *)getManagerWithName:(NSString *)name options:(nullable NSDictionary *)options;

常用管理器 Key

通过该方法可以获取以下核心组件:

常量 Key对应管理器功能
SUDRT_KEY_MANAGER_USER用户管理器:负责同步 App 用户信息、处理登录态鉴权及多端账号同步。
SUDRT_KEY_MANAGER_GAME_PACKAGE包管理器:负责查询已安装的游戏列表、获取包版本信息及清理特定游戏资源。
SUDRT_KEY_MANAGER_PLUGIN插件管理器:负责动态加载或卸载引擎扩展插件。

运行行为

  1. 单例映射:对于同一个 SUDRT 实例,相同的 name 通常会返回同一个单例对象,保证状态的一致性。
  2. 按需初始化:部分管理器采用懒加载机制,只有在第一次调用该方法请求时才会进行初始化。
  3. 类型转换:该方法返回的是通用的 NSObject,开发者需要根据所请求的 Key,将其强制转换为对应的协议类型(如 id<SUDRTUserManager>)。

代码示例

以下是获取用户管理器并注入当前登录用户信息的典型用法:

objectivec
// 1. 获取用户管理器实例
id<SUDRTUserManager> userManager = (id<SUDRTUserManager>)[self.sdkInstance getManagerWithName:SUDRT_KEY_MANAGER_USER options:nil];

if (userManager) {
    // 2. 注入 App 层的用户信息
    NSDictionary *userInfo = @{
        @"userId": @"user_9958",
        @"nickname": @"代码猎人",
        @"avatar": @"https://example.com/a.jpg"
    };
    [userManager updateUserInfo:userInfo];
    NSLog(@"[SUD] 用户管理器配置成功");
}

注意事项

  • 非空检查:由于某些轻量级或精简版引擎可能未集成特定模块,调用后**务必判断返回值是否为 nil**
  • 选项参数:大多数情况下 options 传入 nil 即可。只有在特定的定制化场景下(如需要多实例隔离的管理器),才需要查阅该管理器的专项文档来传入配置。
  • 生命周期:管理器的生命周期通常与 SUDRT 实例绑定。当主引擎实例销毁时,这些管理器也会同步失效。