2010-06-10 3 views
1

Пример:Что происходит внутри блока try?

@try { 
    // 1) do bad stuff that can throw an exception... 

    // 2) do some more stuff 

    // 3) ...and more... 
} 
@catch (NSException *e) { 
    NSLog(@"Error: %@: %@", [e name], [e reason]); 
} 

Если 1) генерирует исключение, является блок немедленно отменяется, как возврат в функции или перерыв в цикле? Или будет 2) и 3) обрабатываться независимо от того, что происходит в 1)?

ответ

4

Если возникает исключение, выполняется выполнение прерываний вашего блока немедленно, а раздел @catch (если он обрабатывает соответствующий тип исключения) выполняется.

Пример кода:

@try { 
    NSArray* arr = [NSArray arrayWithObjects:@"1", @"2", @"3", nil]; 
    NSLog([arr objectAtIndex: 0]); 
    NSLog([arr objectAtIndex: 5]); 
    NSLog(@"Lala"); 
} 
@catch (NSException * e) { 
    NSLog(@"%@, %@", [e name], [e reason]); 
} 

Output: 
1 
NSRangeException, *** -[NSCFArray objectAtIndex:]: index (5) beyond bounds (3) 
Смежные вопросы