CocoaSettings.h
3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// CocoaSettings.h
// CocoaSettings
//
// Created by Yunpeng Li on 2018/4/19.
// Copyright © 2018年 Baidu. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for CocoaSettings.
FOUNDATION_EXPORT double CocoaSettingsVersionNumber;
//! Project version string for CocoaSettings.
FOUNDATION_EXPORT const unsigned char CocoaSettingsVersionString[];
#import <CocoaSettings/CSDataLayer.h>
#import <CocoaSettings/CSModuleSettings.h>
#import <CocoaSettings/CSDataLayer.h>
@class BDPKVManager;
#define AliasSettings(Protocol, Selector) \
@protocol Protocol; \
@protocol CSSettings_##Protocol \
@property (class, nonatomic, strong, readonly) id<Protocol> Selector; \
@end \
@interface CSSettings(Protocol)<CSSettings_##Protocol> \
@end
#define registerSettings(SettingsClass) [[CocoaSettings sharedInstance] registerSettings: [SettingsClass class]]
#define registerPublicSettings(Protocol, SettingsClass) [[CocoaSettings sharedInstance] registerPublicSettings:@protocol(Protocol) implClass:[SettingsClass class]]
#define registerPublicSettingsWithAlias(Protocol, SettingsClass, Alias) \
do {\
[[CocoaSettings sharedInstance] registerPublicSettings:@protocol(Protocol) implClass:[SettingsClass class]]; \
[[CocoaSettings sharedInstance] registerAlias:@selector(Alias) forPublicSettings:@protocol(Protocol)]; \
} while(0)
/// 专门用于不同模块间的分发调用
@interface CSSettings: NSObject
@end
@interface CSDefaultSettings: CSSettings
@end
@interface CSModifiedSettings: CSSettings
@end
/// 标准层没有具体的值,其通过顺序查询各层直至取回值
extern NSString * const kCSDataLayerIdentifierStandard;
/// 默认提供两层 默认层、改动层
extern NSString * const kCSDataLayerIdentifierDefault;
extern NSString * const kCSDataLayerIdentifierModified;
/// CocoaSettings持久化文件的后缀: .settings
extern NSString * const kCSFileExtension;
/// 创建KV组件时使用的唯一ID
extern NSString * const kCSKVId;
extern NSString * const kCSModuleSettingsIdentifierABTest;
extern NSString * const kCSKVValueSuffix;
@interface CocoaSettings : NSObject
@property (nonatomic, copy, readonly) NSArray<CSDataLayer *> *layers;
@property (nonatomic, copy, readonly) NSArray<Class> *registeredSettingsClasses;
@property (nonatomic, copy, readonly) NSString *defaultCachePath;
@property (nonatomic, assign) BOOL finishStageTTI; // TTI阶段是否完成
@property (nonatomic, assign) BOOL isFirstOrUpdateInstall; // 是否是首次或覆盖安装,默认为正常启动
@property (nonatomic, copy) NSString *conveniencePrefix;
+ (instancetype)sharedInstance;
#pragma mark - 创建Settings实例相关
- (CSModuleSettings *)settingsForClass:(Class)settingsClass layerIdentifier:(NSString *)layer;
#pragma mark - 注册相关
- (void)registerSettings:(Class)settingsClass;
- (void)registerPublicSettings:(Protocol *)protocol implClass:(Class)implClass;
- (void)registerAlias:(SEL)selector forPublicSettings:(Protocol *)protocol;
#pragma mark - DataLayer相关
- (CSDataLayer *)layerForIdentifier:(NSString *)identifier;
- (void)registerLayer:(CSDataLayer *)layer invokeSettings:(Class)invokeSettings;
#pragma mark - 持久化相关
- (void)loadDataIfNeededForSettings:(Class)settingsClass;
/// 如果有改动,则立即进行持久化
- (void)synchronizeIfNeeded;
- (void)synchronizeForSettingsIfNeeded:(Class)settingsClass;
/// 在下一个runloop执行synchronizeIfNeeded(用于避免导入数据时,同一时间内大量读写)
- (void)setNeedsSynchronize;
///获取启动阶段默认层耗时
- (NSDictionary *)getDefaultSettingTimeCost;
///获取KVManager
- (BDPKVManager *)getKVManager;
@end