美文网首页
iOS NSException与crash处理

iOS NSException与crash处理

作者: PandaXiong | 来源:发表于2018-01-09 14:45 被阅读94次

    利用 分类(category) + runtime + 异常的捕获 来防止Foundation一些常用方法使用不当而导致的崩溃。其原理就是利用category、runtime来交换两个方法,并且在方法中捕获异常进行相应的处理。

    • 1、通过category给类添加方法用来替换掉原本存在潜在崩溃的方法。
    • 2、利用runtime方法交换技术,将系统方法替换成我们给类添加的新方法。
    • 3、利用异常的捕获来防止程序的崩溃,并且进行相应的处理
    #import "NSMutableArray+Extension.h"
    
    #import <objc/runtime.h>
    
    @implementation NSMutableArray (Extension)
    
    + (void)load {
        
        Class arrayMClass = NSClassFromString(@"__NSArrayM");
        
        //获取系统的添加元素的方法
        Method addObject = class_getInstanceMethod(arrayMClass, @selector(addObject:));
        
        //获取我们自定义添加元素的方法
        Method avoidCrashAddObject = class_getInstanceMethod(arrayMClass, @selector(avoidCrashAddObject:));
        
        //将两个方法进行交换
        //当你调用addObject,其实就是调用avoidCrashAddObject
        //当你调用avoidCrashAddObject,其实就是调用addObject
        method_exchangeImplementations(addObject, avoidCrashAddObject);
    }
    
    - (void)avoidCrashAddObject:(id)anObject {
        
        @try {
            [self avoidCrashAddObject:anObject];//其实就是调用addObject
        }
        @catch (NSException *exception) {
            
            //能来到这里,说明可变数组添加元素的代码有问题
            //你可以在这里进行相应的操作处理
            
            NSLog(@"异常名称:%@   异常原因:%@",exception.name, exception.reason);
        }
        @finally {
            //在这里的代码一定会执行,你也可以进行相应的操作
        }
    }
    
    @end
    
    

    相关文章

      网友评论

          本文标题:iOS NSException与crash处理

          本文链接:https://www.haomeiwen.com/subject/dqawnxtx.html