Exception catching is essential in developing application in .net framework and java.
While in Objective-C, it is much less powerful and shouldn't rely on it, as usually it just crash and didn't catch anything. Yet, it is still a plus if you really catch something.
Usage is really simple
@try
{
Function_You_Want_To_Catch_Exception;
}
@catch (NSException* exception)
{
Do_Thing_After_Exception_Caught;
}
One example is to put it in
main.m, in order to catch any uncaught exception.
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = -1;
@try {
retVal = UIApplicationMain(argc, argv, nil, nil);
}
@catch (NSException* exception) {
NSLog(@"Uncaught exception: %@", exception.description);
NSLog(@"Stack trace: %@", [exception callStackSymbols]);
}
[pool release];
return retVal;
}
which shows how to catch all uncatched exception in the app.
Another usage is when you like "exception programming", you can raise your own exception, by using
[NSException raise:format:] and catch it with above code.
Example:
[NSException raise:NSInvalidArgumentException format:@"Foo must not be nil"];
There are several exception name already defined by apple
here. but if you want to use your own, put a NSString there is fine.