zoukankan      html  css  js  c++  java
  • 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,还有很多不明白的地方,非常希望可以得到大家的指点。

  • 相关阅读:
    一个程序员的负罪感
    【软件安装记录篇】本地虚拟机Centos7快速安装MySQL
    三分钟熟悉进制转换与位运算
    Base64 编码原理
    Java 注解
    数据结构之链表-动图演示
    数据结构之红黑树-动图演示(下)
    数据结构之红黑树-动图演示(上)
    通过TreeMap 和 冒泡算法对JSON 进行排序
    Quartz 之 windowService
  • 原文地址:https://www.cnblogs.com/scorpiozj/p/3008301.html
Copyright © 2011-2022 走看看