私はView Controllerを持っています.2つの方法で戻ることができます.
最初のシナリオは次のようになります。
RecordVC
Delegate
->に伝えるdismissRecordVC:
->RecordVC
解雇および割り当て解除
2 番目のシナリオは次のようになります。
RecordVC
-> 伝えますDelegate
- dismissAndShowVideosForRecordVC:
>RecordVC
却下され、VideosTVC
提示されますが、割り当て RecordVC
は解除されません。
最初のシナリオは次のようにトリガーされます。
- (IBAction)back:(id)sender {
if ([_chromaKeySessionManager isWriting]) {
[_chromaKeySessionManager cancelWriting];
}
[_chromaKeySessionManager stopRunning];
[delegate dismissRecordVC:self];
}
デリゲート メソッドdismissRecordVC:
は次のとおりです。
- (void)dismissRecordVC:(RecordVC *)vc {
[self dismissModalViewControllerAnimated:YES];
}
このback:
方法を使用すると、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 の割り当てが解除され、後者のシナリオでは割り当てが解除されることはありません。奇妙で、これを言うべきではないことはわかっていますが、内部リークのようです.
閉じるために完了ブロックを使用するときに気付いていないことを保持していますか? ありがとう