Я реализую кэш, в котором я использую NSMutableDictionary
для хранения слабой ссылки объектов. Я знаю, что NSMaptable
обеспечивает эффективный способ хранения слабых и сильных рефери. Но его доступно на> = iOS6. Мое требование заключается в поддержке iOS> = 5. У меня есть лучший способ использования NSMutableDicitonary?
. Любой фрагмент кода для хранения слабой ссылки в NSMutableDictionary
, поможет. И также, могу ли я использовать NSCache для этого случая? Спасибо.Хранение слабых ссылок в NSMutableDictionary
0
A
ответ
0
Вот моя категория для слабых ссылок NSMutableDictionary.
.h файл:
@interface NSMutableDictionary (WeakReferenceObj)
- (void)setWeakReferenceObj:(id)obj forKey:(NSString *)key;
- (void)removeDeallocRef;
@end
.m файл:
#pragma mark - WeakReferenceObj
@interface WeakReferenceObj : NSObject
@property (nonatomic, weak) id weakRef;
@end
@implementation WeakReferenceObj
+ (id)weakReferenceWithObj:(id)obj{
WeakReferenceObj *weakObj = [[WeakReferenceObj alloc] init];
weakObj.weakRef = obj;
return weakObj;
}
@end
#pragma mark - NSMutableDictionary(WeakReferenceObj)
@implementation NSMutableDictionary(WeakReferenceObj)
- (void)setWeakReferenceObj:(id)obj forKey:(NSString *)key{
[self setObject:[WeakReferenceObj weakReferenceWithObj:obj] forKey:key];
}
- (void)removeDeallocRef{
NSMutableArray *deallocKeys = nil;
for (WeakReferenceObj *weakRefObj in [self allKeys]) {
if (!weakRefObj.weakRef) {
if (!deallocKeys) {
deallocKeys = [NSMutableArray array];
}
[deallocKeys addObject:weakRefObj];
}
}
if (deallocKeys) {
[self removeObjectsForKeys:deallocKeys];
}
}
@end
Как использовать:
заменить своим [dic setObject:obj forKey:key];
с [dic setWeakReferenceObj:obj forKey:key];
Примечание:
Поскольку объекты dealloc кэшируются в словаре, если ваш слабый ссылочный dic используется глобально, вы должны вызвать [dic removeDeallocRef];
в некотором правильном положении, например - (void)didReceiveMemoryWarning{}
.
Смежные вопросы
- 1. эффекты слабых ссылок в java
- 2. Восстановление жестких ссылок с мягких/слабых ссылок
- 3. Другие виды использования слабых ссылок?
- 4. Каковы практические применения слабых ссылок?
- 5. Хранение незарегистрированного класса в NSMutableDictionary
- 6. Хранение объектов NSTimer в NSMutableDictionary
- 7. HashMap слабых ссылок на объекты в android
- 8. Правильный способ использования слабых ссылок в Python
- 9. Использование слабых ссылок в статической библиотеке
- 10. Стоимость использования слабых ссылок в Java
- 11. Путаница относительно слабых ссылок в Java
- 12. Использования слабых ссылок в приложении Java EE
- 13. Как создать словарь слабых ссылок в Swift:
- 14. Почему автореферат ARC при использовании слабых ссылок?
- 15. Какую библиотеку использовать для слабых ссылок
- 16. Использование слабых ссылок для реализации композиции
- 17. Objective C, NSMutableDictionary счетчик ссылок
- 18. Хранение ссылок на карте
- 19. Хранение данных в таблице ссылок
- 20. Хранение ссылок в словарях Swift
- 21. Хранение ссылок в базе данных
- 22. Хранение ссылок в памяти стека
- 23. Состав объекта: хранение ссылок и идентификаторов ссылок
- 24. Итерировать массив слабых ссылок, где объекты соответствуют протоколу в Swift
- 25. Простого кэширования данных с использованием слабых ссылок в WCF
- 26. Хранение ссылок на элементы DOM
- 27. Хранение ссылок на двух актеров
- 28. Хранение нескольких ссылок на Firebase
- 29. NSMutableDictionary, который сохраняет свои ключи
- 30. Возможно ли реализовать NSFastEnumeration при использовании слабых ссылок?