7_2-核心common-数据
1 概述
該模組位於資料夾 PolyvLiveCommonModule/Modules/Room 下,管理的資料包括:配置資料、http 資料、業務模組資料等。這些資料合併在一起,使用資料模型類別 PLVRoomData 進行資料獲取或儲存,並使用 PLVRoomDataManager 作為對外的資料路由器,當資料發生變化時,通知各個已註冊監聽的業務模組。
2 核心類別介紹
2.1 PLVRoomData
資料模型類別 PLVRoomData 對外提供了以下幾個介面,介面回傳的資料由 PLVRoomData 持有:
/// 设置 roomUser
- (void)setupRoomUser:(PLVRoomUser *)roomUser;
/// 获取频道菜单信息
- (void)requestChannelDetail:(void(^)(PLVLiveVideoChannelMenuInfo *channelMenuInfo))completion;
/// 上报观看热度
- (void)reportViewerIncrease;
/// 获取功能开关
- (void)requestChannelFunctionSwitch;
除了介面 -requestChannelFunctionSwitch 在初始化聊天室時(可選)進行請求,其他介面(必選)均在登入時進行呼叫,使用範例詳見登入管理器 PLVRoomLoginClient。
2.2 PLVRoomDataManager
資料路由器 PLVRoomDataManager 是單例,負責持有每個直播間只允許存在一個實例的 PLVRoomData 物件,並對持有的 roomData 進行 KVO 監聽,當 roomData 管理的資料發生變化時,通知各個已註冊監聽的業務模組。
資料路由器 PLVRoomDataManager 中,roomData 的屬性相關介面定義如下:
/// 当前活跃的直播间数据
@property (nonatomic, strong, readonly) PLVRoomData *roomData;
/// 单例方法
+ (instancetype)sharedManager;
/// 配置当前的直播间数据,进入直播间时调用
- (void)configRoomData:(PLVRoomData *)roomData;
/// 移除当前的直播间数据,离开直播间时调用
- (void)removeRoomData;
使用範例如下,介面呼叫上下文詳見登入管理器 PLVRoomLoginClient:
// 登录时调用
[[PLVRoomDataManager sharedManager] configRoomData:roomData];
// 退出登录时调用
[[PLVRoomDataManager sharedManager] removeRoomData];
資料監聽註冊、移除監聽相關介面如下:
/// 增加PLVRoomDataManagerProtocol协议的监听者
/// @param delegate 待增加的监听者
/// @param delegateQueue 执行回调的队列
- (void)addDelegate:(id<PLVRoomDataManagerProtocol>)delegate delegateQueue:(dispatch_queue_t)delegateQueue;
/// 移除PLVRoomDataManagerProtocol协议的监听者
/// @param delegate 待移除的监听者
- (void)removeDelegate:(id<PLVRoomDataManagerProtocol>)delegate;
/// 移除PLVRoomDataManagerProtocol协议的所有监听者
- (void)removeAllDelegates;
介面 -removeAllDelegates 在資料路由器 PLVRoomDataManager 內部已在呼叫 -removeAllDelegates 移除當前持有的直播間資料時進行了呼叫,只需要在各個需要監聽 roomData 資料的業務模組、功能頁面呼叫 -addDelegate:delegateQueue: 介面,在不需要監聽的時候(例如頁面退出、模組註銷時)呼叫 -removeDelegate: 介面。
