Objective-C에서 에러가 발생하면 NSError 객체를 사용하거나, NSException과 @try, @catch, @finally 구문을 사용해서 처리할 수 있다.
NSError는 Objective-C에서 에러를 처리하기 위한 클래스로 에러 정보를 포함하는 여러 속성을 제공한다. 주요 속성은 Domain, Code, User Info가 있다.
// NSError ** : 포인터의 포인터, 함수가 새로운 에러 객체를 반환하거나 수정할 수 있도록 사용
- (BOOL)someMethodWithError:(NSError **)error {
// 에러 발생 시 에러 정보를 error 포인터를 통해 반환
if (/* some error condition */) {
if (error) {
*error = [NSError errorWithDomain:@"com.example.error"
code:100
userInfo:@{NSLocalizedDescriptionKey: @"Something went wrong"}];
}
return NO;
}
return YES;
}
// NSError * : 단일 에러 객체를 참조하는 포인터
NSError *error = nil;
BOOL success = [self someMethodWithError:&error];
if (!success) {
NSLog(@"Error: %@", error.localizedDescription);
}
NSException은 주로 프로그램의 비정상적인 상태인 예외 발생 시 @throw키워드로 예외를 던진다. @try 블록에서 예외를 발생시킬 수 있는 코드를 실행하고, @catch 블록에서 예외를 처리할 수 있다. @finally 블록은 예외 발생 여부와 관계없이 항상 실행되고 필수는 아니다.
- (void)someMethod {
@throw [NSException exceptionWithName:@"CustomException"
reason:@"Something went wrong"
userInfo:nil];
}
@try {
[self someMethod];
}
@catch (NSException *exception) {
NSLog(@"Exception: %@", exception.reason);
}
@finally {
// Clean-up code, if needed
}