2012-04-12 7 views
1

私には2つの方法があります。 dismissRecordVC:Delegateを伝えます> - -Deallocが呼び出されていない

RecordVC却下>RecordVC

2つ目のシナリオは、このように書き割り当て解除:

最初のシナリオは、このように書き

RecordVC - >がDelegateを伝えますはを返します。RecordVCは割り当て解除されません。

最初のシナリオは、次のようにトリガーされます。

- (IBAction)back:(id)sender { 
    if ([_chromaKeySessionManager isWriting]) { 
     [_chromaKeySessionManager cancelWriting]; 
    } 
    [_chromaKeySessionManager stopRunning]; 
    [delegate dismissRecordVC:self]; 
} 

デリゲートメソッドdismissRecordVC:これです:このback:メソッドを使用する場合は

- (void)dismissRecordVC:(RecordVC *)vc { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

、その後、RecordVCがうまく割り当てが解除されます。

2つ目のシナリオは、次のようにトリガーされます。

- (IBAction)goToVideos { 
    if ([_chromaKeySessionManager isWriting]) { 
     [_chromaKeySessionManager cancelWriting]; 
    } 
    [_chromaKeySessionManager stopRunning]; 
    [delegate dismissAndShowVideosForRecordVC:self]; 
} 

とデリゲートのdismissAndShowVideosForRecordVC:方法:

- (void)dismissAndShowVideosForRecordVC:(RecordVC *)vc { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     VideosTVC *vc = [[VideosTVC alloc] init]; 
     [[self navigationController] pushViewController:vc animated:YES]; 
     [vc release];  
    }]; 
} 

ので、この場合には、RecordVCが割り当て解除されることは決してありません。ここでの唯一の違いは、これをコンプリートブロックで却下し、別のコントローラーを押すことです。

私にとって、両方のシナリオでは、RecordVC getの割り当てが解除され、後者のシナリオでは割り当てが解除されないという点を除いて、全く同じように見えます。奇妙なことに、私はこれを言うべきではないが、内部漏れのように思える。

私が残していることは、完了ブロックを使用して解雇することを知らないということですか? ありがとう

+0

dismissViewControllerAnimatedはUIViewControllerのメソッドです。ここで確認してください:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html – 0xSina

+0

その場合、コードのどこかにVideoTVCの参照が保持されています(保持?)。 –

+0

本当に確認する必要はありますか?2つのシナリオがあります.1つは、すぐに見分けることができますが、違いはなく、参照は保持されませんが、魔法のように割り当てが解除されることはありません。しかし、私はもう一度確認することを確認します – 0xSina

答えて

0

1つの違いは、完了ブロックがselfを参照していることです。それはブロックが発砲するまで少なくともそれを保持します。確かに、その後、それは解放されるべきです。

[self navigationController]を保持するブロック外のローカルを作成してからブロック内のそのローカルを使用して、selfへの参照がないようにしてください。

-dismissAndShowVideosForRecordVC:には、パラメータと同じ名前のローカルがあることを指摘します。問題ではありませんが、おそらくコンパイラのバグがあります。

+1

私はこれを考えましたが、自己が保持されているものではないことに気がついたとき、自分自身を止めました、それは提示されたView Controllerです。 – borrrden

+0

ああ、良い点。私はトラックを失った。 ;) –

+0

入力いただきありがとうございます。良い呼び出しは、同じ変数名を見ていないので、それを変更しました(しかし、まだ違いはありません)。 navControllerのためのブロックの外側には違いはありません。:( – 0xSina

関連する問題