Objective-C:錯誤處理

viiimaus發表於2017-02-14
//
//  ViewController.m
//  第14章 專家級技巧:錯誤處理
//
//  Created by meipaipai on 17/2/3.
//  Copyright © 2017年 meipaipai. All rights reserved.
//

#import "ViewController.h"


@interface ViewController ()<NSURLConnectionDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //14-1.執行時錯誤情況
    //-- 程式執行時出現的錯誤情況
    //-- 邏輯錯誤,語義錯誤,使用者輸入錯誤
    
    /*
     * 1.斷言:判斷條件是否成立,檢查程式設計邏輯和語義錯誤
     * 2.錯誤編碼:標示制定執行時錯誤
     * 3.錯誤物件:用於封裝和傳輸使用者需要了解的執行時錯誤資訊
     * 4.異常:程式執行過程中出現的反常
     */
    
    //14-2 NSError類
    //-- 建立錯誤物件, 屬性是錯誤編碼,錯誤域和使用者資訊目錄。
//    NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:nil];
    
    //如果在指定目錄沒有找到檔案,這個錯誤物件就會被建立
    NSString *desc = NSLocalizedString(@"FileNotFound", @"");
    NSDictionary *info = @{NSLocalizedDescriptionKey:desc};
    NSError *err = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:info];
    NSLog(@"%@", err);
    
    
    /*errorWithDomain:錯誤域
     
    FOUNDATION_EXPORT NSErrorDomain const NSCocoaErrorDomain;//Cocoa Frameworks的錯誤編碼
    FOUNDATION_EXPORT NSErrorDomain const NSPOSIXErrorDomain;//源自遵守POSIX標準的Unix版本的錯誤編碼
    FOUNDATION_EXPORT NSErrorDomain const NSOSStatusErrorDomain;//Apple OS X Core Services 和 Carbon framework的錯誤編碼
    FOUNDATION_EXPORT NSErrorDomain const NSMachErrorDomain;//OS核心錯誤編碼
    */
    
    //1.使用錯誤物件
    //-- 委託:將錯誤物件作為引數傳送給委託方法
    //-- 間接:從程式呼叫的方法間接獲取錯誤物件
    
//    NSError *writeerr;
//    NSData *greeting = [@"Hello, world" dataUsingEncoding:NSUTF8StringEncoding];
//    BOOL success = [FileWriter write......]

    
    
    //14-3 異常處理,執行過程中處理異常的機制
    @try {
//        Code that can potentially throw an exception
        //可能丟擲異常的程式碼
    } @catch (NSException *exception) {
//        Handle an exception thrown in the @try block
        //處理異常的程式碼
        @throw exception;
        //    @throw expression  丟擲異常
    } @finally {
//        Code that gets executed whether or not an exception is thrown
        //釋放資源的程式碼
    }
    
    //14-4 NSException 類
    //-- 管理異常
    
    //exceptionWithName  異常名稱
    //reason   異常原因
    //userInfo   自定義資訊目錄
//    NSException *exception = [NSException exceptionWithName:NSGenericException reason:@"111" userInfo:nil];
    
//    @try {
//        [NSException raise:NSGenericException format:@"%@", @"22222"];
//    } @catch (NSException *exception) {
//        NSLog(@"%@--\n%@", [exception name], [exception description]);
//    }

    NSArray *array = @[@"1", @"2", @"3", @"4"];
    @try {
        int a = 4;
        NSLog(@"%@", array[a]);
    } @catch (NSException *exception) {
        NSLog(@"%@--\n%@", [exception name], [exception description]);
    }
    
    /*
     FOUNDATION_EXPORT NSExceptionName const NSGenericException;
     FOUNDATION_EXPORT NSExceptionName const NSRangeException;
     FOUNDATION_EXPORT NSExceptionName const NSInvalidArgumentException;
     FOUNDATION_EXPORT NSExceptionName const NSInternalInconsistencyException;
     
     FOUNDATION_EXPORT NSExceptionName const NSMallocException;
     
     FOUNDATION_EXPORT NSExceptionName const NSObjectInaccessibleException;
     FOUNDATION_EXPORT NSExceptionName const NSObjectNotAvailableException;
     FOUNDATION_EXPORT NSExceptionName const NSDestinationInvalidException;
     
     FOUNDATION_EXPORT NSExceptionName const NSPortTimeoutException;
     FOUNDATION_EXPORT NSExceptionName const NSInvalidSendPortException;
     FOUNDATION_EXPORT NSExceptionName const NSInvalidReceivePortException;
     FOUNDATION_EXPORT NSExceptionName const NSPortSendException;
     FOUNDATION_EXPORT NSExceptionName const NSPortReceiveException;
     
     FOUNDATION_EXPORT NSExceptionName const NSOldStyleException;
     
     */
    
    //比較
    //錯誤物件:可以封裝錯誤資訊,為恢復操作提供基礎資訊,cocoa框架支援。  難維護,難理解,可讀性差,與程式邏輯放在一起。
    
    //異常:檢測異常和處理異常操作分開,提高了程勳可維護性。檢測異常到處理異常的自動化。   浪費資源,降低程式效能,cocoa框架,不是異常安全式框架。
    
    
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

相關文章