Я в процессе преобразования моего проекта в ARC, и столкнулся с особой проблемой.У меня есть класс, который управляет кэшем файлов, которые загружаются из сети.Каждый файл хранится в файловой системе iPhone, и связанный с ним объект сохраняется в моем классе менеджера для него.Другие объекты, которые хотят использовать файл, запрашивают у моего менеджера объект кэша и сохраняют его до тех пор, пока им нужен файл.
Но время от времени менеджер очищает кэш, удаляя старыйфайлы.Конечно, он не должен удалять файлы, которые используются в данный момент.До ARC я обнаружил, что с помощью 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 вы больше не можете использовать retainCount.Я мог бы ввести свой собственный механизм подсчета хранения и потребовать, чтобы все объекты, использующие файлы, явно сохраняли и освобождали файловые объекты.Но это ошибка, и именно эту задачу ARC должен решить.
Знаете ли вы лучший способ добиться того же?