Цель C – Потерянный с циклами сохранения

после отклонения моего VC я заметил, что я не освобождаю все от памяти. Я очень потерял то, как я буду искать свой цикл сохранения. Я использую NSTimer и NSNotificationCenter, но перед завершением я должен сделать недействительным и удалитьObservers, и я убедился в использовании слабого делегата.

Где еще могут быть мои циклы сохранения? В блоках анимации? Как это?

[UIView animateWithDuration:.1 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.setListTableViewVertConst.constant = 0; self.setListTableViewHeightConst.constant = 264; } completion:^(BOOL finished) { }]; 

При использовании GCD я стараюсь использовать weakSelf.

 __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.remotePasswordTextField resignFirstResponder]; }); 

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ:

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { //Send the room code to be displayed on the respective view controllers. if ([segue.identifier isEqualToString:@"toSetListRoomVC"]) { SetListRoomViewController *setListVC = segue.destinationViewController; setListVC.roomCode = self.roomCodeTextField.text; } } 

viewWIllApear

 [super viewWillAppear:YES]; self.socket = [[SocketKeeperSingleton sharedInstance]socket]; self.socketID = [[SocketKeeperSingleton sharedInstance]socketID]; NSString *roomCodeAsHost = [[SocketKeeperSingleton sharedInstance]hostRoomCode]; /////////HOST///////// if ([[SocketKeeperSingleton sharedInstance]isHost]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveHostSongAddedNotification:) name:kQueueAdd object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveUserJoinedNotification:) name:kUserJoined object:nil]; NSLog(@"User is the host of this room"); self.isHost = YES; [self viewForNoCurrentArtistAsHost]; self.roomCodeLabel.text = roomCodeAsHost; if (!self.hostQueue) { self.hostQueue = [[NSMutableArray alloc]init]; } if (!self.hostCurrentArtist) { self.hostCurrentArtist = [[NSMutableDictionary alloc]init]; } if (!self.player) { self.player = [[AVPlayer alloc]init]; } if (!self.timer) { self.timer = [[NSTimer alloc]init]; } } ///////NOT HOST/////// else { // Add a notifcation observer and postNotification name for updating the tracks. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveQueueUpdatedNotification:) name:kQueueUpdated object:nil]; //Add a notifcation observer and postNotification name for updating current artist. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveCurrentArtistUpdateNotification:) name:kCurrentArtistUpdate object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveOnDisconnectNotification:) name:kOnDisconnect object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveHostDisconnectNotification:) name:kHostDisconnect object:nil]; //Add some animations upon load up. Purple glow and tableview animation. double delay = .4; [self purpleGlowAnimationFromBottomWithDelay:&delay]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom]; //Set Current artist, if there is one. NSDictionary *currentArtist = [[SocketKeeperSingleton sharedInstance]currentArtist]; [self setCurrentArtistFromCurrentArtist:currentArtist]; //Set the current tracks, if there is one. NSArray *setListTracks = [[SocketKeeperSingleton sharedInstance]setListTracks]; if (setListTracks) { self.tracks = setListTracks; } } } 

tableVIEWs

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView.tag == 1) { if (self.isHost) { return [self.hostQueue count]; } else return [self.tracks count]; } else return [self.searchTracks count]; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } 

    Я заметил, что вы используете слово «popOut» в некоторых комментариях, поэтому я собираюсь предположить, что вы используете навигационный контроллер.

    Если это так, ваш контроллер просмотра сохраняется навигационным контроллером, в который он встроен и не выпущен. Контроллер nav должен хранить ссылку на ваш VC (см. UINavigationController.viewControllers), чтобы он мог вернуться к нему, когда вы выходите из верхнего / следующего VC в иерархии.

    Это ожидаемое поведение.

    В этом примере кода вы не используете __weak для self

      [UIView animateWithDuration:.1 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.setListTableViewVertConst.constant = 0; self.setListTableViewHeightConst.constant = 264; } completion:^(BOOL finished) { }]; 

    Однако с первого взгляда это, похоже, не создает цикл сохранения. Код, который вы разместили, по-видимому, не имеет, так что это, вероятно, где-то в другом месте. Вы уверены, что у вас есть циклы?

    Во всяком случае, попробуйте настроить приложение. Это может помочь.

    Interesting Posts
    Давайте будем гением компьютера.