打开main.m 添加修改以下代码
void exceptionHandler(NSException *exception)
{
id delegate = [[UIApplication sharedApplication] delegate];
if([delegate respondsToSelector:@selector(terminateWithException:)])
{
[delegate performSelector:@selector(terminateWithException:) withObject:exception];
}
}
void signalHandler(int sig, siginfo_t *info, void *context)
{
// signal exception
NSException *e = [NSException exceptionWithName:@"signal exception"
reason:[NSString stringWithFormat:@"signal %d", sig]
userInfo:nil];
exceptionHandler(e);
}
int main(int argc, char *argv[])
{
// For uncaultexception
NSSetUncaughtExceptionHandler(&exceptionHandler);
// For signals
struct sigaction sigAction;
sigAction.sa_sigaction = signalHandler;
sigAction.sa_flags = SA_SIGINFO;
sigemptyset(&sigAction.sa_mask);
sigaction(SIGQUIT, &sigAction, NULL);
sigaction(SIGILL, &sigAction, NULL);
sigaction(SIGTRAP, &sigAction, NULL);
sigaction(SIGABRT, &sigAction, NULL);
sigaction(SIGEMT, &sigAction, NULL);
sigaction(SIGFPE, &sigAction, NULL);
sigaction(SIGBUS, &sigAction, NULL);
sigaction(SIGSEGV, &sigAction, NULL);
sigaction(SIGSYS, &sigAction, NULL);
sigaction(SIGPIPE, &sigAction, NULL);
sigaction(SIGALRM, &sigAction, NULL);
sigaction(SIGXCPU, &sigAction, NULL);
sigaction(SIGXFSZ, &sigAction, NULL);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
然后再打开AppDelegate.m
增加函数
-(void)terminateWithException:(NSException*)e
{
static BOOL deadway = NO;
if(deadway)
return;
deadway = YES;
/ / NSLog(@"Exception --- %@", e); E就是错误信息了,建议写到一个文件里
[self applicationWillTerminate:[UIApplication sharedApplication]];
deadway = NO;
}
本文深入探讨了iOS开发中异常处理和信号管理的重要性和实践方法,通过实现自定义异常处理器和信号处理器,确保应用在遇到错误时能够优雅地退出,并记录错误信息。同时,介绍了如何配置不同类型的信号处理器来处理特定的信号事件,从而提升应用的稳定性和用户体验。

370

被折叠的 条评论
为什么被折叠?



