освобождение объекта приводит к exc_bad_access

#exc-bad-access

#исключение из-за неправильного доступа

Вопрос:

Меня немного смущает следующий код. Я был хорошим солдатом и расставлял точки над i и пересекал точки над t, освобождая объект tmp в следующем фрагменте. Однако во время выполнения я получаю «EXC_BAD_ACCESS»

     -(void) aMethod {
            .
            .
        if (testMode) {         
            MyClass *tmp = [[MyClass alloc] init];
            [tmp aMethodInTheClass];
            [tmp release];
        }
            .
            .
    }
  

Если я удалю инструкцию [tmp release], ошибка не будет сгенерирована.

Является ли освобождение ненужным, потому что область действия объекта ‘tmp’ прекращается после внутреннего условия if?

Спасибо.

Комментарии:

1. Похоже, вашему приложению нужен указатель на него! Определите эту переменную в .h, создайте ее в методе ur и освободите ее внутри метода освобождения приложения

2. Но я не хотел вводить переменную экземпляра для этой временной переменной.

3. Проверьте мой ответ, который может сработать!

Ответ №1:

Попробуйте это,

 -(void) aMethod {
            .
            .
        if (testMode) {         
            MyClass *tmp = [[MyClass alloc] autorelease];
            [tmp aMethodInTheClass];
        }
            .
            .
    }
  

Удачи!