Когда зарегистрированный пользователь открывает мое приложение, они направляются к главному TabBarController из моего AppDelegate, например, так:XCode: Утечка памяти при выполнении модального SEGUE
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
tabBar.selectedIndex = 2;
// (this is MainViewController in the tab bar)
Теперь пользователь находится в MainViewController. Когда пользователь выбирает конкретный чат они хотели войти, они направляются в ChatViewController (не на TabBarController), например, так:
[self performSegueWithIdentifier:@"showChatSeg" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.destinationViewController isKindOfClass:ChatViewController.class]){
ChatViewController *destinationViewController = (ChatViewController *)segue.destinationViewController;
if(self.createdDialog != nil){
destinationViewController.dialog = self.createdDialog;
self.createdDialog = nil;
}else{
QBChatDialog *dialog = [ChatService shared].dialogs[self.selectedChat];
destinationViewController.dialog = dialog;
}
}
}
Когда это происходит, я вижу всплеск использования памяти, который имеет смысл. Тем не менее, когда пользователь покидает ChatViewController и вернуться к MainViewController, например, так:
- (IBAction)backButton:(id)sender {
[self performSegueWithIdentifier:@"fromChatToDashSeg" sender:nil];
// This is a storyboard segue back to the MainTabBarController
}
Я получаю следующее предупреждение:
Attempt to present <MainTabBarController: 0x17ef28d0> on <ChatViewController: 0x17d6c940> whose view is not in the window hierarchy!
И использование памяти остается неизменным. И когда пользователь снова заходит в чат, память продолжает расти. Не отклоняю ли я диспетчеров отправки?
Вы используете модальный сеанс для представления чата? Вместо того, чтобы использовать segue, чтобы вернуться. Попробуйте позвонить [self rejectViewControllerAnimated: YES complete: nil]; –