Можно ли доверять objectForKey сразу после setObject в NSCache?

Учитывая этот пример кода (кэш – это экземпляр NSCache):

- (id)objFromCache { if ([cache objectForKey:@"myObject"] == nil) [cache setObject:[self generateObject] forKey:@"myObject"]; return [cache objectForKey:@"myObject"]; } 

Должен ли я доверять этому коду? Я имею в виду, будет objectForKey:@"myObject" когда-либо возвращает nil сразу после setObject:forKey:@"myObject" ? Если да, то я могу изменить, if на while ?

Каков наилучший способ справиться с этой ситуацией? Благодаря!

One Solution collect form web for “Можно ли доверять objectForKey сразу после setObject в NSCache?”

По крайней мере, в многопоточной среде вы не можете предположить, что NSCache возвращает объект, который вы только что вставили.

Кроме того, если первый вызов [cache objectForKey:@"myObject"] не возвращает nil , второй из возвращаемого оператора может возвращать nil .

Поэтому я буду играть в нее безопасно и напишу свой метод как

 - (id)objFromCache { id value = [cache objectForKey:@"myObject"]; if (value == nil) { value = [self generateObject]; [cache setObject:value forKey:@"myObject"]; } return value; } 
  • Очистить кеш программно в iOS
  • NSCache и фон
  • NSCache objectForKey: всегда возвращать нуль после предупреждения о памяти на iOS 8
  • Как очистить кеш PFFIle (Parse.com)
  • Каков правильный способ использования NSCache с dispatch_async в многоразовой ячейке таблицы?
  • iOS - Лучшая практика для сохранения изображений локально - NSCache и Save in Document Directory
  • Как использовать NSCache
  • кеш-массив объектов iOS
  • NSCache для хранения изображений для UITableView
  • NSCache для хранения изображений для UITableView In Swift
  • Проверить содержимое NSCache на iOS?
  • NSCache - объект маркировки не снимается
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.