XCode Memory Debugger показывает экземпляры уже удаленных объектов - iOS - PullRequest
0 голосов
/ 29 сентября 2019

Пожалуйста, смотрите прикрепленное изображение для справки.Все viewControllers уже удалены из приложения, но Memory Debugger показывает его экземпляры и все его свойства.Когда я нажимаю Show Only Leaked blocks фильтр отладчика памяти, viewControllers и другие экземпляры не появляются в нем.Означает ли это, что нет утечек?

Как решить проблему.Что это значит?

enter image description here

У меня есть блок PKYStepper в CartViewController s cellForRowAtIndexPath (Stepper является UIControl в моем TableViewCell) методе следующим образом:

PKYStepper *qtyStepper = [cell viewWithTag:993];

qtyStepper.tappedCallback = ^(PKYStepper *stepper) {

            NSLog(@"Tapped!");

            rowSelected = indexPath;

            if (((Dish*)((MenuSubSection*)_section.subSections[0]).dishesArray[indexPath.row]).disheOptions.count)
            {
                UIWindow *window = [UIApplication sharedApplication].keyWindow;

                NSBundle* bun = [NSBundle bundleWithIdentifier:@"com.test.test"];

                DishItemOption *dishOptions = [[bun loadNibNamed:@"DishItemOption" owner:self options:nil] objectAtIndex:0];
                dishOptions.frame = CGRectMake(0, 0, window.frame.size.width, window.frame.size.height);

                dishOptions.dish = [[Dish alloc] initWithDishObject:((Dish*)((MenuSubSection*)_section.subSections[0]).dishesArray[indexPath.row])];
                dishOptions.delegate = self;
                [window addSubview:dishOptions];
            }

        };

Как сделать так, чтобы он ссылался на Слабое Я?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Похоже, вы, вероятно, захватили контроллер представления в каком-то блоке обратного вызова.

В частности, PKYStepper, кажется, имеет блок обратного вызова, который строго ссылается на контроллер представления.Либо убедитесь, что упомянутое задание слабо, либо убедитесь, что блок правильно разрушен при разрушении контроллера вида.

0 голосов
/ 30 сентября 2019

Нашел решение.Обновлены мои обратные вызовы:

__weak typeof(self) weakSelf = self;

    qtyStepper.incrementCallback = ^(PKYStepper *stepper, float newValue) {

        CartViewController *sSelf = weakSelf;

        [sSelf updateTotalCharges]; //Had to use WEAKSELF in the callback!

    };
...