清理键盘emoji内存高的问题
This commit is contained in:
@@ -41,6 +41,9 @@ FOUNDATION_EXPORT NSString * const KBEmojiRecentsDidChangeNotification;
|
||||
/// 更新当前语言对应的分类标题。
|
||||
- (void)refreshLocalizedTitles;
|
||||
|
||||
/// 释放大块缓存(emoji 分类与索引),下次访问会重新加载。
|
||||
- (void)purgeLargeCaches;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -195,6 +195,12 @@ static const NSUInteger kKBEmojiRecentsLimit = 32;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)purgeLargeCaches {
|
||||
self.categoriesInternal = nil;
|
||||
self.itemLookup = nil;
|
||||
self.recentValues = nil;
|
||||
}
|
||||
|
||||
- (void)onLocalizationChanged:(__unused NSNotification *)note {
|
||||
[self refreshLocalizedTitles];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:KBEmojiRecentsDidChangeNotification object:nil];
|
||||
|
||||
@@ -37,15 +37,6 @@
|
||||
_selectionCounts = [NSMutableDictionary dictionary];
|
||||
NSArray<NSString *> *defaults = [self.class kb_defaultWords];
|
||||
_priorityWords = [NSSet setWithArray:defaults];
|
||||
_words = [self kb_loadWords];
|
||||
_traditionalChineseWords = [self kb_loadTraditionalChineseWords];
|
||||
_simplifiedChineseWords = [self kb_loadSimplifiedChineseWords];
|
||||
_pinyinToTraditionalMap = [self kb_loadPinyinToTraditionalMap];
|
||||
_bopomofoToChineseMap = [self kb_loadBopomofoToChineseMap];
|
||||
_spanishWords = [self kb_loadSpanishWords];
|
||||
_englishWords = [self kb_loadEnglishWords];
|
||||
_portugueseWords = [self kb_loadPortugueseWords];
|
||||
_indonesianWords = [self kb_loadIndonesianWords];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -190,12 +181,16 @@
|
||||
} else {
|
||||
self.engineType = KBSuggestionEngineTypeLatin;
|
||||
}
|
||||
[self kb_trimCachesForEngineType:self.engineType];
|
||||
NSLog(@"[KBSuggestionEngine] Engine type set to: %@", engineTypeString);
|
||||
}
|
||||
|
||||
#pragma mark - English Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_englishSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.englishWords) {
|
||||
self.englishWords = [self kb_loadEnglishWords];
|
||||
}
|
||||
NSArray<NSString *> *matches = [self kb_suggestionsFromWordList:self.englishWords
|
||||
prefix:prefix
|
||||
limit:limit];
|
||||
@@ -245,6 +240,9 @@
|
||||
#pragma mark - Latin Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_latinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.words) {
|
||||
self.words = [self kb_loadWords];
|
||||
}
|
||||
NSString *lower = prefix.lowercaseString;
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
|
||||
@@ -282,6 +280,9 @@
|
||||
#pragma mark - Traditional Chinese Pinyin Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_traditionalPinyinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.pinyinToTraditionalMap) {
|
||||
self.pinyinToTraditionalMap = [self kb_loadPinyinToTraditionalMap];
|
||||
}
|
||||
NSString *lower = prefix.lowercaseString;
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
|
||||
@@ -320,6 +321,9 @@
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)kb_fallbackTraditionalSuggestions:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.traditionalChineseWords) {
|
||||
self.traditionalChineseWords = [self kb_loadTraditionalChineseWords];
|
||||
}
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
for (NSString *word in self.traditionalChineseWords) {
|
||||
[matches addObject:word];
|
||||
@@ -333,6 +337,9 @@
|
||||
#pragma mark - Simplified Chinese Pinyin Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_simplifiedPinyinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.pinyinToTraditionalMap) {
|
||||
self.pinyinToTraditionalMap = [self kb_loadPinyinToTraditionalMap];
|
||||
}
|
||||
NSString *lower = prefix.lowercaseString;
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
|
||||
@@ -381,6 +388,9 @@
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)kb_fallbackSimplifiedSuggestions:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.simplifiedChineseWords) {
|
||||
self.simplifiedChineseWords = [self kb_loadSimplifiedChineseWords];
|
||||
}
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
for (NSString *word in self.simplifiedChineseWords) {
|
||||
[matches addObject:word];
|
||||
@@ -447,6 +457,9 @@
|
||||
#pragma mark - Bopomofo (Zhuyin) Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_bopomofoSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.bopomofoToChineseMap) {
|
||||
self.bopomofoToChineseMap = [self kb_loadBopomofoToChineseMap];
|
||||
}
|
||||
NSMutableArray<NSString *> *matches = [NSMutableArray array];
|
||||
|
||||
NSArray<NSString *> *directMatches = self.bopomofoToChineseMap[prefix];
|
||||
@@ -606,6 +619,9 @@
|
||||
#pragma mark - Spanish Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_spanishSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.spanishWords) {
|
||||
self.spanishWords = [self kb_loadSpanishWords];
|
||||
}
|
||||
NSArray<NSString *> *matches = [self kb_suggestionsFromWordList:self.spanishWords
|
||||
prefix:prefix
|
||||
limit:limit];
|
||||
@@ -655,6 +671,9 @@
|
||||
#pragma mark - Portuguese Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_portugueseSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.portugueseWords) {
|
||||
self.portugueseWords = [self kb_loadPortugueseWords];
|
||||
}
|
||||
NSArray<NSString *> *matches = [self kb_suggestionsFromWordList:self.portugueseWords
|
||||
prefix:prefix
|
||||
limit:limit];
|
||||
@@ -704,6 +723,9 @@
|
||||
#pragma mark - Indonesian Suggestions
|
||||
|
||||
- (NSArray<NSString *> *)kb_indonesianSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit {
|
||||
if (!self.indonesianWords) {
|
||||
self.indonesianWords = [self kb_loadIndonesianWords];
|
||||
}
|
||||
NSArray<NSString *> *matches = [self kb_suggestionsFromWordList:self.indonesianWords
|
||||
prefix:prefix
|
||||
limit:limit];
|
||||
@@ -784,4 +806,78 @@
|
||||
return matches.copy;
|
||||
}
|
||||
|
||||
- (void)kb_trimCachesForEngineType:(KBSuggestionEngineType)engineType {
|
||||
switch (engineType) {
|
||||
case KBSuggestionEngineTypeEnglish:
|
||||
self.spanishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.words = nil;
|
||||
self.traditionalChineseWords = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypeSpanish:
|
||||
self.englishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.words = nil;
|
||||
self.traditionalChineseWords = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypePortuguese:
|
||||
self.englishWords = nil;
|
||||
self.spanishWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.words = nil;
|
||||
self.traditionalChineseWords = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypeIndonesian:
|
||||
self.englishWords = nil;
|
||||
self.spanishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.words = nil;
|
||||
self.traditionalChineseWords = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypePinyinTraditional:
|
||||
case KBSuggestionEngineTypePinyinSimplified:
|
||||
self.words = nil;
|
||||
self.englishWords = nil;
|
||||
self.spanishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypeBopomofo:
|
||||
self.words = nil;
|
||||
self.englishWords = nil;
|
||||
self.spanishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
break;
|
||||
case KBSuggestionEngineTypeLatin:
|
||||
default:
|
||||
self.englishWords = nil;
|
||||
self.spanishWords = nil;
|
||||
self.portugueseWords = nil;
|
||||
self.indonesianWords = nil;
|
||||
self.traditionalChineseWords = nil;
|
||||
self.simplifiedChineseWords = nil;
|
||||
self.pinyinToTraditionalMap = nil;
|
||||
self.bopomofoToChineseMap = nil;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user