2012-06-14 6 views

Odpowiedz

4

Należy używać punktu przerwania tylko na objc_exception_throw. Ta metoda obejmuje wszystkie przypadki, które obejmuje . Na odwrót nie jest prawdą: Dyrektywa @throw jest kompilowana, aby bezpośrednio wywoływać objc_exception_throw. Metoda ta pokazuje różnicę:

- (void)throwAndCatch 
{ 
    @try { 
     NSException *exception = [[NSException alloc] initWithName:@"Test" 
                  reason:@"test" 
                  userInfo:nil]; 
     @throw exception; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"Caught"); 
    } 
} 

Dzwoniąc -throwAndCatch, punkt przerwania na -[NSException raise] ma żadnego efektu, podczas gdy przerwania na objc_exception_throw zadziała.

0

Oto co z dokumentacji firmy Apple o wyjątek:

Ważną różnicą pomiędzy @throw i podnieść to, że ten ostatni mogą być wysyłane tylko do obiektu NSException natomiast @throw może innych typów obiektów jako jego argument (np. obiekty typu string). Aplikacje kakao powinny @ rzucić tylko obiekty NSException.

Czyli jeśli wdrożenie Cocoa applciation project a jeśli ściśle przestrzegać że @throw tylko NSExeption obiektów są takie same.

odniesienie: Link

Powiązane problemy