批量本地图片视频同时加载的问题

标签: iOS Obj-C AVPlayer UITableView UICollectionView


最近做一个类似照片应用的照片视频浏览器,结合 UITableViewUICollectionView 将自己录制的视频罗列。

实现过程中有几个点需要注意:

  • 显示多个图片时会造成View 的卡顿,加载图片时需要将[UIImage imageNamed:imageName]更改为[UIImage imageWithContentsOfFile:imagePath] 的方式

  • 保存图片到 APP 中时会造成内存的递增,这是因为通过UIImagePNGRepresentation()方法保存PNG格式图片时,由于ARC机制,会产生大量临时的autorelease对象,需要等待runloop的autoreleasepool销毁时才能销毁这些对象。需要使用 ImageIO 的方式来存储图片

+ (void)saveImage:(CGImageRef)image directory:(NSString*)directory filename:(NSString*)filename  {
    @autoreleasepool {
        CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", directory, filename]];
        CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
        CGImageDestinationAddImage(destination, image, nil);
        
        if (!CGImageDestinationFinalize(destination))
            NSLog(@"ERROR saving: %@", url);
        
        CFRelease(destination);
        CGImageRelease(image);
    }
}

编辑视频时,会选择多个视频,需要将选择的视频进行预览播放。在使用AVPlayer来播放视频时,AVPlayer只能创建16个对象,最多只能支持16个视频的同时播放。当视频不需要继续播放后,需要将它的 AVPlayerItem置为 nil,否则之前播放过的视频也会算在16个视频之内。


【参考】

  1. UIImage存为PNG图片内存增长
  2. Putting a UICollectionView in a UITableViewCell
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,204评论 4 61
  • 要看懂快手,要先弄懂什么是“社会平均人”? 社会平均人是快手CEO在一次采访里透露的概念,他说快手把整个中国社会当...
    嵩岳阅读 4,649评论 2 0
  • 入夏以来雨水丰沛得有些过分,淅淅沥沥的梅雨期延续了一月余,每一口呼吸都充满了90%的水汽。走在乡间,满目苍翠,那绿...
    Cathy浅7阅读 1,560评论 0 0
  • 文章源地址 打造你的工具箱 一套高效的开发环境 这款编缉器能被长期使用,在这个过程不断的打磨,使其能完全适合自己的...
    rxdxxxx阅读 2,920评论 0 0