87 lines
2.4 KiB
Objective-C
87 lines
2.4 KiB
Objective-C
//
|
||
// AvoidCrash.h
|
||
// AvoidCrash
|
||
//
|
||
// Created by mac on 16/9/21.
|
||
// Copyright © 2016年 chenfanfang. All rights reserved.
|
||
//
|
||
|
||
#import <Foundation/Foundation.h>
|
||
#import <objc/runtime.h>
|
||
|
||
//category
|
||
#import "NSObject+AvoidCrash.h"
|
||
|
||
#import "NSArray+AvoidCrash.h"
|
||
#import "NSMutableArray+AvoidCrash.h"
|
||
|
||
#import "NSDictionary+AvoidCrash.h"
|
||
#import "NSMutableDictionary+AvoidCrash.h"
|
||
|
||
#import "NSString+AvoidCrash.h"
|
||
#import "NSMutableString+AvoidCrash.h"
|
||
|
||
#import "NSAttributedString+AvoidCrash.h"
|
||
#import "NSMutableAttributedString+AvoidCrash.h"
|
||
|
||
|
||
/**
|
||
* if you want to get the reason that can cause crash, you can add observer notification in AppDelegate.
|
||
* for example:
|
||
*
|
||
* [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealwithCrashMessage:) name:AvoidCrashNotification object:nil];
|
||
*
|
||
* ===========================================================================
|
||
*
|
||
* 你如果想要得到导致崩溃的原因,你可以在AppDelegate中监听通知,代码如上。
|
||
* 不管你在哪个线程导致的crash,监听通知的方法都会在主线程中
|
||
*
|
||
*/
|
||
#define AvoidCrashNotification @"AvoidCrashNotification"
|
||
|
||
|
||
|
||
//user can ignore below define
|
||
#define AvoidCrashDefaultReturnNil @"This framework default is to return nil to avoid crash."
|
||
#define AvoidCrashDefaultIgnore @"This framework default is to ignore this operation to avoid crash."
|
||
|
||
|
||
#ifdef DEBUG
|
||
|
||
#define AvoidCrashLog(...) NSLog(@"%@",[NSString stringWithFormat:__VA_ARGS__])
|
||
|
||
#else
|
||
|
||
#define AvoidCrashLog(...)
|
||
#endif
|
||
|
||
|
||
@interface AvoidCrash : NSObject
|
||
|
||
|
||
/**
|
||
* become effective . You can call becomeEffective method in AppDelegate didFinishLaunchingWithOptions
|
||
*
|
||
* 开始生效.你可以在AppDelegate的didFinishLaunchingWithOptions方法中调用becomeEffective方法
|
||
*
|
||
* 这是全局生效,若你只需要部分生效,你可以单个进行处理,比如:
|
||
* [NSArray avoidCrashExchangeMethod];
|
||
* [NSMutableArray avoidCrashExchangeMethod];
|
||
* .................
|
||
* .................
|
||
*/
|
||
+ (void)becomeEffective;
|
||
|
||
|
||
//user can ignore below method <用户可以忽略以下方法>
|
||
|
||
|
||
+ (void)exchangeClassMethod:(Class)anClass method1Sel:(SEL)method1Sel method2Sel:(SEL)method2Sel;
|
||
|
||
+ (void)exchangeInstanceMethod:(Class)anClass method1Sel:(SEL)method1Sel method2Sel:(SEL)method2Sel;
|
||
|
||
+ (void)noteErrorWithException:(NSException *)exception defaultToDo:(NSString *)defaultToDo;
|
||
|
||
|
||
@end
|