我有一个UICollectionView / UITableView显示图像,当我滚动图像时,内存分配逐渐增长并最终导致我的设备崩溃。
要为UICollectionView / UITableView创建我的对象,我有一个构建器类,我从JSON生成对象(此JSON中包含的是图像的Base64字符串)。创建这些对象后,我将它们放入NSArray,然后将它们传递给UICollectionView / UITableView。
内存分配问题发生在(在构建器类中)我从Base64创建UIImage时:
NSData *dataFromString = [[NSData alloc] initWithBase64EncodedString:base64 options:0];
UIImage *image = [[UIImage alloc]initWithData:dataFromString];
但是如果我从png / jpg创建我的UIImage(再次在构建器类中)我没有问题(即内存分配不会增长):
UIImage *image = [UIImage imageNamed:@"image.png"];
我使用了仪器,似乎没有内存泄漏,当我解雇UICollectionView / UITableView时,内存占用量下降,但我不知道为什么差异似乎是使用Base64。
提前致谢
卡尔。
答案 0 :(得分:0)
我通过创建tempFileManger类解决了这个问题,然后我将UIImages写为临时目录为PNG:
NSString *path = [tempDir stringByAppendingPathComponent:imageObject.title];
NSData *data = UIImagePNGRepresentation(imageObject.image);
然后在我的cellForItemAtIndexPath方法中,我使用以下方法检索:
NSString *path = [tempDir stringByAppendingPathComponent:imageObject.title];
UIImage *image = [UIImage imageWithContentsOfFile:path];
完成图像使用后,我使用tempFileManagerClass删除了临时文件夹中的所有图像。
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:tempDir error:nil];
for (NSString *filename in contents) {
[[NSFileManager defaultManager] removeItemAtPath:[tempDir stringByAppendingPathComponent:filename] error:NULL];
}