2013-07-24 3 views
0

Я с трудом понимая переход от @ попытаться @ уловомПереход между @try @catch

Я понимаю, что если заявление от блока @try бросает исключение, блок @catch запускается на выполнение , Я не понимаю, как объект NSException, содержащий информацию об исключении, передается в качестве аргумента. Многие вещи, которые я читаю онлайн об исключениях, пропускают эту деталь.

Пример из моей книги

@try { 
    [myArray objectAtIndex: 2]; 
} 

@catch (NSException *exception){ 
    NSLog(@"Caught %@%@", exception.name, exception.reason); 
} 

Поэтому, как только исключение обнаруживаются является объект исключения автоматически создается и отправляется в блок @catch?

+0

Как только исключение поймано блоком @catch, оно создается указателем исключения, а имя и причина являются частью созданного исключения – user2277872

+0

Итак, как только исключение поймано блоком @catch, создается указатель ссылка на это исключение? – Brosef

+0

точно. NSException создает его как указатель на исключение, а указатель устанавливается на любой вид исключения. Существуют общие исключения для NSException, а затем NSException имеет возможность создавать новые для тех, с которыми общий не будет работать. – user2277872

ответ

0

Try and Catch используются для обработки исключений. Всякий раз, когда в блоке try возникает ошибка, компилятор переходит к соответствующему блоку Catch и передает ему объект Exception. Мы просто обращаемся к объекту исключения, чтобы узнать подробности ошибки.

0

Да. При возникновении ошибки генерируются stack frames, сгенерированные вызовом, чтобы проверить, есть ли инструкция «try» с блоком «catch». Когда он находит, создается экземпляр объекта Exception, содержащий контекст выполнения (например, контекст о стеке вызова, поток и сведения об ошибке), и этот объект передается как параметр в блок catch.


Совет: проверьте лучшие практики повторного исключения исключений в объективе-c. В C# я знаю, что операция rethrow can change scope of the exception.

Надеюсь, это поможет.