• cocoa: 异常和错误处理


    本篇对cocoa项目中,错误和异常处理做一些总结。也欢迎大家批评交流。

    对于异常我们经常使用try-catch:

     @try {
            //有可能错误的代码
            @throw expression
        }
        @catch (NSException *exception) {
            //捕获异常
        }
        @finally {
            //最终处理
        }

    这种形式经常用于开发模式下debug,但是从实际操作来看,用的不多(或者说不知道怎么用)。

    我们将错误和异常做了区分:

    错误就是需要用户知道的,用户需要即使作出反应或者只需要知道的

    异常就是会引起程序奔溃或者不能正常运行,或者即使能正常运行但需要及时修正的

    反映到程序上,错误会需要和用户交互,但异常需要尽量的避免。

    在实际中,我们这样处理:

    1. 发生的错误,需要用户反应才能继续操作的,使用NSAlert:

    [NSAlert alertWithMessageText:<#(NSString *)#>
                        defaultButton:<#(NSString *)#>
                      alternateButton:<#(NSString *)#>
                          otherButton:<#(NSString *)#>
            informativeTextWithFormat:<#(NSString *), ...#>]

    2. 发生错误,不影响程序运行,用户也不需要马上反应。可以使用NSAlert,或者:

    [view/window presentError:<#(NSError *)#>
                   modalForWindow:<#(NSWindow *)#>
                         delegate:<#(id)#>
               didPresentSelector:<#(SEL)#>
                      contextInfo:<#(void *)#>]

    这个方法定义在NSResponder中,view/window都可以调用。这种方法还会根据error的响应链逐级传递。

    3.发生了异常,但不至于使程序奔溃等。比如数组越界之类的错误,在Cocoa上并不会使程序奔溃。这里推荐使用cocoa的exception库。

    //要记得添加framework,再import
    #import <ExceptionHandling/ExceptionHandling.h>
    
    
    //在controller类:
    [[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:0x01ff];//mask可根据需要设置
    [[NSExceptionHandler defaultExceptionHandler] setDelegate:self];
    
    //实现delegate:
    - (BOOL)exceptionHandler:(NSExceptionHandler *)sender shouldLogException:(NSException*)exception mask:(unsigned int)mask
    {
        NSLog(@"%s:\n%@",__PRETTY_FUNCTION__, exception);
        // our handling
        return YES;
    }

    这种方法可以捕获任何异常,适于在debug下调试。

    以上就是我们项目中异常和错误处理的经验总结。

    初次开发cocoa,还有很多不明白的地方,非常希望可以得到大家的指点。

  • 相关阅读:
    《算法导论》第二章笔记
    Python实现websocket之Django Channel实时推送与聊天
    zabbix设置钉钉报警
    ESXi安装报错,No network adapters were detected...
    supervisor指南
    Flask入门到放弃(五)—— 蓝图
    Flask入门到放弃(四)—— 数据库
    Flask入门很轻松(三)—— 模板
    Flask入门很轻松 (二)
    Flask入门很轻松 (一)
  • 原文地址:https://www.cnblogs.com/scorpiozj/p/3008301.html
Copyright © 2020-2023  润新知