逗号分隔值 (Comma-Separated Values, CSV ,有时也称为 字符分隔值 ,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。(:来自百度百科)
假设我们的项目中有一个 csv 文件,叫做1
假设我们有一个 likee.csv 需要放在Documents目录下
2.够造需要写入的数据
3.够造为NSData,并使用NSData进行文件的写入。
在 mac 下文本的默认编码格式使用的是UTF-8,在 windows 的 Excel 上,对中文的处理是GBK,所以可能会造成乱码的问题。如果读取文件是无法读出内容,就和使用的编码格式有关。所以建议先使用UTF-8进行解码,如果无法显示内容,再用GBK进行解码
最近遇到一个保存图片时的崩溃, 崩溃信息如下:
提示的异常信息是:
查看一下调用函数, 主要调用如下:
说明在执行 NSData *imageData = UIImagePNGRepresentation(image) 这个 *** 作时,崩溃了。而且崩溃的原因是 内存分配出错 。 通常这种问题都是因为内存不足引起的。但是查看了一下log, 发现并没有 MemoryWarning 这句日志, 说明程序还没来得及处理系统的内存警告就崩溃了 。
根据这些现象猜测可能的原因
针对这两种猜测,作了相应的处理
其实有 UIImage 对象的时候,说明图片已经可以正常展示,加载这张图片到内存暂时是没有问题的。但保存的时候又根据 UIImage 对象生成 NSData, 然后在通过NSData保存文件。 在NSData写入文件到释放前,内存里面其实有两份 图片 的数据, 一份是显示的, 一份是准备用来保存的NSData。 这样其实就是临时分配了一块大空间,如果可以减少临时对象的分配,直接读取UIImage的数据来存储就可以降低内存的使用。
通过查阅文档,发现Image IO 的库可以做到。
于是,保存函数改成这样:
这种情况比较好处理,就是因为加到 AutoReleasePool 的对象没有马上释放,必须要等下一次 RunLoop 循环才会清理。
这种问题可以加 @autoreleasepool{} 处理。
最后函数变成:
当然 @autoreleasepool 写在这里作用并不大, 应该要加在相应的for()循环里面。
因此定义一个宏,方便替换,只要把原来的 for 替换成 AutoRelease_for 就可以。
1.获取Caches 文件夹路径。
NSString *pathDocuments = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
2.在Caches 文件夹下面 建一个子文件夹便于管理!
NSString *imagePath = [NSString stringWithFormat:@"%@/Media", pathDocuments]
[[NSFileManager defaultManager] createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:nil]
文件名字为 Media。
3.获取NSData
NSString * path = [[NSBundle mainBundle] pathForResource:@"D0024" ofType:@"mp4"]
NSData *videoMy=[NSData dataWithContentsOfFile:path]
NSMutableData *videoData =[NSMutableData data]
[videoData setData:[NSData data]]
[videoData appendData:videoMy]
NSString *filePath = [imagePath stringByAppendingPathComponent:@"DJI_0024.mp4"]
BOOL isSuccess = [videoData writeToFile:filePath atomically:YES]
if (isSuccess) {
NSLog(@"能写进去")
}
else{
NSLog(@"不成功")
}
NSURL *url = [NSURL fileURLWithPath:filePath]
AVPlayerViewController * play = [[AVPlayerViewController alloc]init]
play.player = [[AVPlayer alloc]initWithURL:url]
[self presentViewController:play animated:YES completion:nil]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)