0

UIImageを複製して不必要にメモリを増やすことなく、さまざまなView Controller間でUIImageを渡す方法を見つけようとしています。画像は以下のメソッドを使用して正常に渡されますが、後でこの UIImage を解放できないようです。これにより、説明できない 7MB 以上のデータがアプリに重くのしかかることになります。私が知りたいのは、(現在のビュー コントローラーに属する) UIImage を次に切り替えるビュー コントローラーに渡し、元のポインターを解放すると、メモリに何が起こっているかということです。このような:

-(IBAction)startEditing:(id)sender
{

    EditViewController *controller = [[EditViewController alloc] initWithNibName:@"EditViewController" bundle:nil];
    controller.delegate = self;

            //imageDataPhoto1 is of type UIImage (from camera)
            controller.editPhotoData1 = imageDataPhoto1;
            [imageDataPhoto1 release];
            imageDataPhoto1 = nil;

        controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:controller animated:YES];

    [controller release];

}

ポインターimageDataPhoto1の DATA は、解放される前にビューコントローラーインスタンスに割り当てられているため、解放されていませんか?

4

2 に答える 2

2

EditViewControllerの .h ファイルでeditPhotoData1 @propertywithが宣言されている場合retain、割り当てられたオブジェクトは自動的に保持されます。release少なくとも inEditViewControllerdeallocメソッドでオブジェクトを明示的に指定する必要があります。

当然のことながら、releaseすべてのクラスに対して、dealloc メソッドで保持するプロパティ セットを確認する必要があります。つまり、次のようになります。

- (void)dealloc
{
    [editPhotoData1 release];
    ...
    [super dealloc];
}
于 2009-08-28T05:58:25.540 に答える