Я представляю прокрутку изображений с двумя столбцами, похожую на Pinterest, с использованием PSCollectionView https://github.com/ptshih/PSCollectionView и загружая изображения асинхронно с помощью https://github.com/rs/SDWebImage
На iPhone 5 оно работает непрерывно без сбоев, но на iPhone 4 я сталкиваюсь с предупреждениями о памяти, и при постоянной прокрутке приложение в конечном итоге падает.
SDWebImage
утверждает, что они освобождают кеш при получении предупреждения о памяти, а PSCollectionView
управляет количеством просмотров, удаляя из очереди повторно используемые представления, поэтому я не уверен, что именно вызывает проблемы с памятью.
Я запустил профилирование памяти, но не вижу ничего очевидного — наиболее интенсивное использование памяти происходит при SDWebImage
асинхронной загрузке изображений. Похоже, что метод objectForKey
для получения данных из моего PFObjects
(с parse.com) также занимает хороший кусок памяти.
Я прикрепил ниже, в частности, фрагмент кода, который устанавливает содержимое каждой PSCollectionView
ячейки.
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо конкретные проблемы с кодом, которые могут привести к проблемам с памятью, а также дайте мне знать, если у вас есть предложения о том, как лучше диагностировать эту проблему с памятью.
- (UIView *)collectionView:(PSCollectionView *)collectionView cellForRowAtIndex:(NSInteger)index withRect:(CGRect) recttouse {
FPCollectionViewCell *thefpcell = (FPCollectionViewCell *)
[collectionView dequeueReusableViewForClass:[FPCollectionViewCell class]];
thefpcell.frame = recttouse;
if (thefpcell == nil) {
thefpcell = [[FPCollectionViewCell alloc] initWithFrame:recttouse];
//NSLog(@"creating this cell: %i", index);
UILabel *cellText = [[UILabel alloc] initWithFrame:CGRectMake(2,0,143,20)];
thefpcell.cellText = cellText;
thefpcell.cellText.textAlignment = NSTextAlignmentCenter;
UIImageView *cellImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,20,recttouse.size.width, recttouse.size.height-20)];
thefpcell.cellImage = cellImage;
thefpcell.backgroundColor = [UIColor whiteColor];
thefpcell.cellText.font = [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:9];
thefpcell.cellText.backgroundColor = [UIColor clearColor];
[thefpcell addSubview:cellText];
[thefpcell addSubview:cellImage];
}
//@Brian note--consider moving more of this to other blocks to try and improve performance
[[NSOperationQueue mainQueue] addOperation:[NSBlockOperation blockOperationWithBlock:^{
PFObject *thisobj = [self.contentObjectsArray objectAtIndex:index];
thefpcell.cellText.frame = CGRectMake(2,0,143,20);
thefpcell.cellImage.frame = CGRectMake(0,20,recttouse.size.width, recttouse.size.height-20);
thefpcell.cellText.text = [thisobj objectForKey:@"Caption"];
NSString *imglink = [thisobj objectForKey:@"imgLink"];
NSString *imgurl;
if(imglink.length<2)
{
PFFile *mydata = [thisobj objectForKey:@"imageFile"];
imgurl = mydata.url;
}
else
{
imgurl =imglink;
}
UIImage *cellplaceholder = [UIImage imageWithContentsOfFile:@"placeholder.png"];
[thefpcell.cellImage setImageWithURL:[NSURL URLWithString:imgurl] placeholderImage:cellplaceholder];
thefpcell.layer.cornerRadius = 9.0;
thefpcell.layer.masksToBounds = YES;
}]];
//NSLog(@"got it: %i", index);
return thefpcell;
}