我有一个视图控制器,其中有两种方法可以返回。
第一个场景是这样的:
RecordVC
-> 告诉Delegate
- dismissRecordVC:
>RecordVC
解雇和解除分配
第二种情况是这样的:
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 被释放就好了。
第二种情况是这样触发的:
- (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 被释放,而在后一种情况下,它永远不会被释放。很奇怪,我知道我不应该这么说,但似乎是内部泄漏。
在使用完成块进行解雇时,我是否保留了一些我不知道的东西?谢谢