0

我正在 iPad 模拟器中创建一些临时文件。为了测试我的文件创建,我创建了文件,然后将其读回。这是一些代码来显示这一点:

-(NSString *) writeToTempFile:(UIImage*) image{
NSString *path = [self createTemporaryFile];
NSLog(@"path: %@", path);
NSData *data = UIImageJPEGRepresentation(image, 1);
[data writeToFile:path atomically:YES]; 
free(data);
return path;
}

-(UIImage *) readTempFile:(NSString *) path{
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:data];
return image;
}

在最后一个函数将 UIImage 写入相册之前,我一个接一个地调用这些方法。

UIImageWriteToSavedPhotosAlbum(image2, self, nil, nil);

问题是,这总是在我的应用程序第三次执行时崩溃。第一次和第二次它成功地完成了所有这些并存储到专辑中。第三次它崩溃到主页。有任何想法吗?

4

1 回答 1

6
NSData *data = UIImageJPEGRepresentation(image, 1);
[data writeToFile:path atomically:YES]; 
free(data);

从 UIImageJPEGRepresentation 返回的 NSData 是-autoreleased。没有必要free()。任何 Objective-C 对象都是错误free()——而是发送-release消息。

请通读内存管理编程指南

于 2010-07-20T16:18:03.783 回答