在iPhone临时文件写作中的竞争条件(?)

时间:2010-07-20 16:14:10

标签: iphone objective-c file-io race-condition

我正在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);

问题是,总是在第三次执行时崩溃了我的应用。第一次和第二次成功完成所有这些并存储到相册。第三次它崩溃回家。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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

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

请仔细阅读Memory Management Programming Guide