iOS開發容錯處理–YRClassSafeCategory – iPhone手機開發 iPhone軟體開發教學課程

YRClassSafeCategory


最近發現還是有很多朋友在問類似解析時容錯問題怎麼解決,想瞭想,就把幾年前做的,一直在使用的小容錯庫開源出來。
 

iOS開發中,經常遇到解析字典或其他轉換的情況,比如下面這個dictionary:

NSDictionary *dictionary = @{@"num1":@1,
                      @"num2":@"2",
                      @"string":@"this is a string",
                      @"dic":@{@"key":@"value"},
                      @"array":@[@1,@2],
                      };

一般的解析

-(void)parseDic:(NSDictionary*)dictionary{
    NSInteger num1;
    id num1Obj = [dictionary objectForKey:@"num1"];
    if (num1Obj) {
        if ([num1Obj isKindOfClass:[NSNumber class]]) {
            num1 = [num1Obj integerValue];
        }else if([num1Obj isKindOfClass:[NSString class]]){
            num1 = [num1Obj integerValue];
        }
    }
    NSDictionary *dic = [dictionary objectForKey:@"dic"];
    if (dic&&[dic isKindOfClass:[NSDictionary class]]) {
        //繼續處理
    }
    //。。。其他之類的
    NSString *key;//又或者,你遇到瞭一個傳值過來的key,需要判斷key是否存在(否則會崩潰)
    if(key){
        NSString *string = [dic objectForKey:key];
    }
}

使用瞭我的容錯庫後

-(void)parseDic:(NSDictionary*)dictionary{
    NSInteger num1 = [dictionary integerForKeySafe:@"num1"];
    NSDictionary *dic = [dictionary dictionaryForKeySafe:@"dic"];
    //。。。其他之類的
    NSString *key;//又或者,你遇到瞭一個傳值過來的key,需要判斷key是否存在
    NSString *string = [dic objectForKeySafe:key];
}

從此解析寫起來so easy,而且媽媽再也不用擔心你容錯不到位產生崩潰瞭!

本人對以下幾種情況都做瞭相應處理,主要包括:
1. NSString的數值轉換、字符串截取
2. NSNumber的數值轉換
3. NSDictionary的各種取值和空key處理
4. NSArray的各種越界情況處理
5. …

當發生瞭出錯情況時,比如解析需要一個dic,但是返回類型為string,此時使用我的容錯庫會得到nil,由於nil的任何消息都能安全執行通過,因此不會出現崩潰。

其實目前iOS開發界類似的庫也是存在的,比如DurexKit和VDM。有興趣的也可以去看看。

另外,我這個並未使用runtime對系統方法進行替換,而且留給開發者自己選擇是否使用容錯方法,畢竟有些開發者明確的情況下,少一步判斷就可以節省一點性能。

歡迎留言交流。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *