AvoidCrash.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // AvoidCrash.h
  3. // https://github.com/chenfanfang/AvoidCrash
  4. //
  5. // Created by mac on 16/9/21.
  6. // Copyright © 2016年 chenfanfang. All rights reserved.
  7. //
  8. //===================================================
  9. // 使用方法和注意事项:
  10. // https://www.jianshu.com/p/2b90aa96c0a0
  11. //===================================================
  12. #import <Foundation/Foundation.h>
  13. #import <objc/runtime.h>
  14. //category
  15. #import "NSObject+AvoidCrash.h"
  16. #import "NSArray+AvoidCrash.h"
  17. #import "NSMutableArray+AvoidCrash.h"
  18. #import "NSDictionary+AvoidCrash.h"
  19. #import "NSMutableDictionary+AvoidCrash.h"
  20. #import "NSString+AvoidCrash.h"
  21. #import "NSMutableString+AvoidCrash.h"
  22. #import "NSAttributedString+AvoidCrash.h"
  23. #import "NSMutableAttributedString+AvoidCrash.h"
  24. //define
  25. #import "AvoidCrashStubProxy.h"
  26. @interface AvoidCrash : NSObject
  27. //===================================================
  28. // 使用方法和注意事项:
  29. // https://www.jianshu.com/p/2b90aa96c0a0
  30. //===================================================
  31. /**
  32. *
  33. * 开始生效.你可以在AppDelegate的didFinishLaunchingWithOptions方法中调用becomeEffective方法
  34. * 【默认不开启 对”unrecognized selector sent to instance”防止崩溃的处理】
  35. *
  36. * 这是全局生效,若你只需要部分生效,你可以单个进行处理,比如:
  37. * [NSArray avoidCrashExchangeMethod];
  38. * [NSMutableArray avoidCrashExchangeMethod];
  39. * .................
  40. * .................
  41. *
  42. */
  43. + (void)becomeEffective;
  44. /**
  45. * 相比于becomeEffective,增加
  46. * 对”unrecognized selector sent to instance”防止崩溃的处理
  47. *
  48. * 但是必须配合:
  49. * setupClassStringsArr:和
  50. * setupNoneSelClassStringPrefixsArr
  51. * 这两个方法可以同时使用
  52. */
  53. + (void)makeAllEffective;
  54. /**
  55. * 初始化一个需要防止”unrecognized selector sent to instance”的崩溃的类名数组
  56. * ⚠️不可将@"NSObject"加入classStrings数组中
  57. * ⚠️不可将UI前缀的字符串加入classStrings数组中
  58. */
  59. + (void)setupNoneSelClassStringsArr:(NSArray<NSString *> *)classStrings;
  60. /**
  61. * 初始化一个需要防止”unrecognized selector sent to instance”的崩溃的类名前缀的数组
  62. * ⚠️不可将UI前缀的字符串(包括@"UI")加入classStringPrefixs数组中
  63. * ⚠️不可将NS前缀的字符串(包括@"NS")加入classStringPrefixs数组中
  64. */
  65. + (void)setupNoneSelClassStringPrefixsArr:(NSArray<NSString *> *)classStringPrefixs;
  66. //您可以忽略以下方法
  67. + (void)exchangeClassMethod:(Class)anClass method1Sel:(SEL)method1Sel method2Sel:(SEL)method2Sel;
  68. + (void)exchangeInstanceMethod:(Class)anClass method1Sel:(SEL)method1Sel method2Sel:(SEL)method2Sel;
  69. + (void)noteErrorWithException:(NSException *)exception defaultToDo:(NSString *)defaultToDo;
  70. @end