Я использую NSCache для хранения изображений. Но проблема здесь - это когда я переключаюсь между контроллерами, NSCache пуст. Я хочу, чтобы элементы были там, по крайней мере, до тех пор, пока приложение не будет закрыто или пользователь не выйдет из системы. Допустим, у меня есть представление в виде вкладок, и я сохраняю изображения из данных на первой вкладке. Когда я перейду ко второй вкладке и вернусь к первому, NSCache снова инициализируется.Инициализация NSCache для хранения UIImage ios
Вот мой код: -
- (void)viewDidLoad {
[super viewDidLoad];
if(imageCache==nil)
{
imageCache=[[NSCache alloc]init];
NSLog(@"initialising");
}
[imageCache setEvictsObjectsWithDiscardedContent:NO];
}
(void) reloadMessages {
[Data getClassMessagesWithClassCode:_classObject.code successBlock:^(id object) {
NSMutableArray *messagesArr = [[NSMutableArray alloc] init];
for (PFObject *groupObject in object) {
PFFile *file=[groupObject objectForKey:@"attachment"];
NSString *url1=file.url;
NSLog(@"%@ is url to the image",url1);
UIImage *image = [imageCache objectForKey:url1];
if(image)
{
NSLog(@"This is cached");
}
else{
NSURL *imageURL = [NSURL URLWithString:url1];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];
if(image)
{
NSLog(@"Caching ....");
[imageCache setObject:image forKey:url1];
}
}
}
Контроль никогда не идет в первый, если заявление. Я что-то упускаю?
Да, это дает мне то, что я намеревался сделать. Но часто места, которые я читал, что общие экземпляры не являются хорошей практикой. Каждый класс должен иметь свой собственный NSCache. А что касается общего экземпляра, это нормально, если я использую его для всех просмотров? – user2714823
Возможно, это решение не идеально, но легко для меня. Я могу получить кешированные изображения с любого контроллера вида. Кроме того, я сохраняю загруженные изображения в каталог документов. 1. получить изображение в кеше, если нет. => 2. получить изображение в документах dir, if not present => 3. загрузить из Интернета => 4. сохранить в dir => 5. положить в кеш – iOSfleer