Ich habe einen View-Controller, in dem es zwei Möglichkeiten gibt, zurückzugehen.Dealloc wird nicht aufgerufen
Erstes Szenario so geht:
RecordVC
-> Tells Delegate
zu dismissRecordVC:
->RecordVC
entlassen und ausgeplant
Zweites Szenario so geht:
RecordVC
-> sagt Delegate
zu dismissAndShowVideosForRecordVC:
->RecordVC
entlassen und VideosTVC
präsentiert ABERRecordVC
ist NICHT freigegeben.
Erstes Szenario wird wie folgt ausgelöst:
- (IBAction)back:(id)sender {
if ([_chromaKeySessionManager isWriting]) {
[_chromaKeySessionManager cancelWriting];
}
[_chromaKeySessionManager stopRunning];
[delegate dismissRecordVC:self];
}
die Delegatmethode dismissRecordVC:
dies:
- (void)dismissRecordVC:(RecordVC *)vc {
[self dismissModalViewControllerAnimated:YES];
}
Wenn diese back:
Methode verwendet wird, dann wird RecordVC ausgeplant just fine.
Zweites Szenario wird wie folgt ausgelöst:
- (IBAction)goToVideos {
if ([_chromaKeySessionManager isWriting]) {
[_chromaKeySessionManager cancelWriting];
}
[_chromaKeySessionManager stopRunning];
[delegate dismissAndShowVideosForRecordVC:self];
}
und dismissAndShowVideosForRecordVC:
der Delegatmethode:
- (void)dismissAndShowVideosForRecordVC:(RecordVC *)vc {
[self dismissViewControllerAnimated:YES completion:^{
VideosTVC *vc = [[VideosTVC alloc] init];
[[self navigationController] pushViewController:vc animated:YES];
[vc release];
}];
}
Also, in diesem Fall RecordVC nie freigegeben wird. Der einzige Unterschied hier ist, dass ich es mit einem Completion Block ablehne und einen anderen Controller dränge.
Für mich, in beiden Szenarien sehen genau die gleichen (so weit wie beibehalten/Freigabe geht), außer in der ersten es RecordVC bekommen freigegeben und in letzterem Szenario wird es nie freigegeben. Seltsam, und ich weiß, ich sollte das nicht sagen, aber scheint wie ein internes Leck zu sein.
Gibt es etwas, das ich behalte, das mir nicht bekannt ist, wenn ich den Abschlussblock für die Ablehnung verwende? Danke
disneyViewControllerAnimated ist die Methode von UIViewController. Schau es dir hier an: http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html – 0xSina
In diesem Fall wird irgendwo in deinem Code eine Referenz von VideoTVC gespeichert (behalten?). –
Muss ich wirklich überprüfen?Es gibt zwei Szenarien, in einem wird es gut verteilt, in anderen, wie Sie direkt sehen können, gibt es keinen großen Unterschied und keine Referenzen werden beibehalten, aber es wird nie magisch freigegeben. Aber ich werde noch einmal überprüfen, um sicherzustellen, – 0xSina