1

フリップトランジションを使用して、UI全体で小さなサブビューをアニメーション化する作業を行っています。フリップトランジションを正しく機能させるために、コンテキストを提供する一時的なUIViewを作成し、トランジションを実行してから、後でクリーンアップする必要があります。しかし、アプリケーションをクラッシュさせずにオブジェクトを解放する方法を理解するのに苦労しています。コードブロックは次のとおりです。

UIView *tempContainer = [UIView alloc];
tempContainer = [self.view viewWithTag:700];

[UIView transitionWithView:tempContainer
        duration:2
        options:UIViewAnimationOptionTransitionFlipFromRight
        animations:^{ 
                    [[[tempContainer subviews] objectAtIndex:0] removeFromSuperview]; 
                    [tempContainer addSubview:newImageView];
                    [newImageView release];
                    } 
            completion:^(BOOL finished){
                    [tempContainer release]; //Crashes app
                    }];

iOS4でブロックベースのアニメーション手法を使用しています。問題は、tempContainerが確実にリークしていることですが、完了ブロックでリリースまたは自動リリースするとアプリがクラッシュし、[UIViewtransition...]メッセージの後にクラッシュします。これをリファクタリングして、メモリが漏れないようにするための最良の方法は何ですか?(私にはこれらの小さなことを30個やることがあります。)

4

1 に答える 1

1

あなたが+alloc-edした後、それは漏れます

UIView *tempContainer = [UIView alloc];

すぐにオーバーライドします。

tempContainer = [self.view viewWithTag:700];

-releaseオーバーライド ビュー ( ) を所有していないため、クラッシュします[self.view viewWithTag:700]

于 2010-06-23T16:03:07.780 に答える