IOS内存管理 - 将视频写入临时文件

时间:2015-10-28 03:31:09

标签: ios memory-management avplayer writetofile

我正在创建一个以丰富的故事方式播放多个视频和照片的应用。我获取每个视频数据并将其写入临时文件,以便与AVPlayer一起播放。

NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), [NSString stringWithFormat:@"output%i.mov", i]];
[data writeToFile:outputPath atomically:YES];

viewWillDissapear中,我删除所有这些文件:

NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
for (NSString *file in tmpDirectory) {
    [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
}

但是,当我查看我的应用程序使用的内存量时,在设置中,它大约为300 MB。有没有办法看到实际占用所有这些记忆的是什么?我认为这很高,因为除了currentUser数据(name,profileImage)之外我没有缓存任何东西。 我应该做些什么来清理临时文件吗?

2 个答案:

答案 0 :(得分:1)

但这一行绝对错误:

[data writeToFile:outputPath atomically:YES];

这意味着,在某个时刻 - 这一刻 - 你将整个视频保存在内存中(如data)。那是完全错误的;它永远不会发生。您应该下载到磁盘上的文件,如有必要,将该文件写入另一个文件;你永远不应该尝试将整个视频加载到内存中。

答案 1 :(得分:1)

正如@peter所提到的,您可以使用流媒体Video streaming

否则如果你真的想下载视频文件并将其存储到磁盘空间并希望以后使用它,那么你应该遵循苹果推荐的方式,即NSFileHandle类来优化你的应用程序堆内存,同时下载更大的文件。

NSFileHandle