Я в процессе преобразования моего проекта в использование ARC и столкнулся с особой проблемой. У меня есть класс, который управляет кешем файлов, загружаемых из сети. Каждый файл хранится в файловой системе iPhone, а связанный с ним объект хранится в моем классе менеджера для него. Другие объекты, которые хотят использовать файл, запрашивают мой менеджер для объекта кеша и сохраняют его до тех пор, пока ему нужен файл.автоматический подсчет ссылок (ARC) и retainCount
Но время от времени менеджер очищает кеш, удаляя старые файлы. Разумеется, он не должен удалять файлы, которые используются в данный момент. Перед АРК, я обнаружил, что при использовании retainCount связанного объекта:
// if retainCount is 1 then only the cache has a reference to it
if(obj.retainCount <= 1) {
[obj deleteFile];
[cache removeObject:obj];
}
Это работало отлично [да, я знаю о предупреждениях о ненадежности retainCount, но по моему опыту, если retainCount> 1 вы знаете что более одного объекта сохранили его]
Однако с помощью ARC вам больше не разрешается использовать keepCount. Я мог бы представить свой собственный механизм учета времени и потребовать, чтобы все объекты, которые используют файлы, явно сохраняли и освобождали файловые объекты. Но это ошибка, и это именно то, что ARC должен решить.
Знаете ли вы, что лучший способ достичь того же?
Единственное, что стоит сказать для saveCount: http://stackoverflow.com/a/4636477/106435 – vikingosegundo
Вы считали [NSCache] (https://developer.apple.com/library/ios/ # документация/какао/Справка/NSCache_Class/Справка/reference.html)? – Caleb
@ Калеб: Роб просто дал этот ответ. Я не знал об этом и буду изучать его. – fishinear