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);

問題は、3回目の実行時にアプリが常にクラッシュすることです。1回目と2回目は、これらすべてを正常に実行し、アルバムに保存します。3回目はホームにクラッシュします。何か案は?

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 に答える