我有一個視圖控制器,其中有兩種方法可以返回。Dealloc不被稱爲
第一種情形是這樣的:
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得到的重新分配並且在後一種情況下它永遠不會被釋放。奇怪,我知道我不應該這樣說,但似乎是內部泄漏。
有什麼我保留,我不知道用完成塊解僱的時候嗎? 感謝
dismissViewControllerAnimated是UIViewController的方法。看看這裏:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html – 0xSina 2012-04-12 00:51:38
在這種情況下,你的代碼中的某個地方有一個VideoTVC被保留的引用(保留?)。 – 2012-04-12 00:53:43
我真的需要檢查嗎?有兩種情況,在一種情況下,它可以很好地解除分配,另一種情況是,你可以在那裏看到,沒有什麼區別,沒有引用被保留,但它從未被釋放。但我會再次檢查以確保 – 0xSina 2012-04-12 00:55:39