Почему сохранение счета является различным в режиме отладки и в режиме работы?

Я знаю, как работают ARC и MRC. но я запутался при тестировании приведенного ниже кода. Я не знаю, почему это случилось. Почему счет сохранения отличается в режиме отладки и в режиме выполнения для одного и того же вопроса?

    NSMutableArray *a = [NSMutableArray array];
    [a addObject:@"abc"];
    NSLog(@" 1 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a));
    __weak  NSMutableArray *b = a;
    NSLog(@" 2 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a));
    a = nil;
    NSLog(@" 3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b));
    [b addObject:@"xys"];
    NSLog(@" 4 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b));

Когда я запускаю приложение в рабочем режиме, происходит сбой приложенияNSLog(@" 3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b)); что я понимаю как бweak ссылка на. и возразить получить релиз при назначенииnil к этому. но перед этим, если показывает выход первых двух строк, как показано на рисунке ниже. Что тоже правильно.

Но когда приложение находится в режиме отладки (это означает, что мы установили точку останова и отладку), приложение не аварийно завершает работу, а также показывает счетчик сохранения 2 в каждой строке. как изображение ниже.

У кого-нибудь есть идеи, почему это происходит? Почему один и тот же код дает два разных значения сохранения для разных режимов?

Ответы на вопрос(1)

Ваш ответ на вопрос