MJExtensionConst.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef __MJExtensionConst__H__
  2. #define __MJExtensionConst__H__
  3. #import <Foundation/Foundation.h>
  4. #ifndef MJ_LOCK
  5. #define MJ_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
  6. #endif
  7. #ifndef MJ_UNLOCK
  8. #define MJ_UNLOCK(lock) dispatch_semaphore_signal(lock);
  9. #endif
  10. // 信号量
  11. #define MJExtensionSemaphoreCreate \
  12. static dispatch_semaphore_t signalSemaphore; \
  13. static dispatch_once_t onceTokenSemaphore; \
  14. dispatch_once(&onceTokenSemaphore, ^{ \
  15. signalSemaphore = dispatch_semaphore_create(1); \
  16. });
  17. #define MJExtensionSemaphoreWait MJ_LOCK(signalSemaphore)
  18. #define MJExtensionSemaphoreSignal MJ_UNLOCK(signalSemaphore)
  19. // 过期
  20. #define MJExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
  21. // 构建错误
  22. #define MJExtensionBuildError(clazz, msg) \
  23. NSError *error = [NSError errorWithDomain:msg code:250 userInfo:nil]; \
  24. [clazz setMj_error:error];
  25. // 日志输出
  26. #ifdef DEBUG
  27. #define MJExtensionLog(...) NSLog(__VA_ARGS__)
  28. #else
  29. #define MJExtensionLog(...)
  30. #endif
  31. /**
  32. * 断言
  33. * @param condition 条件
  34. * @param returnValue 返回值
  35. */
  36. #define MJExtensionAssertError(condition, returnValue, clazz, msg) \
  37. [clazz setMj_error:nil]; \
  38. if ((condition) == NO) { \
  39. MJExtensionBuildError(clazz, msg); \
  40. return returnValue;\
  41. }
  42. #define MJExtensionAssert2(condition, returnValue) \
  43. if ((condition) == NO) return returnValue;
  44. /**
  45. * 断言
  46. * @param condition 条件
  47. */
  48. #define MJExtensionAssert(condition) MJExtensionAssert2(condition, )
  49. /**
  50. * 断言
  51. * @param param 参数
  52. * @param returnValue 返回值
  53. */
  54. #define MJExtensionAssertParamNotNil2(param, returnValue) \
  55. MJExtensionAssert2((param) != nil, returnValue)
  56. /**
  57. * 断言
  58. * @param param 参数
  59. */
  60. #define MJExtensionAssertParamNotNil(param) MJExtensionAssertParamNotNil2(param, )
  61. /**
  62. * 打印所有的属性
  63. */
  64. #define MJLogAllIvars \
  65. - (NSString *)description \
  66. { \
  67. return [self mj_keyValues].description; \
  68. }
  69. #define MJExtensionLogAllProperties MJLogAllIvars
  70. /** 仅在 Debugger 展示所有的属性 */
  71. #define MJImplementDebugDescription \
  72. - (NSString *)debugDescription \
  73. { \
  74. return [self mj_keyValues].debugDescription; \
  75. }
  76. /**
  77. * 类型(属性类型)
  78. */
  79. FOUNDATION_EXPORT NSString *const MJPropertyTypeInt;
  80. FOUNDATION_EXPORT NSString *const MJPropertyTypeShort;
  81. FOUNDATION_EXPORT NSString *const MJPropertyTypeFloat;
  82. FOUNDATION_EXPORT NSString *const MJPropertyTypeDouble;
  83. FOUNDATION_EXPORT NSString *const MJPropertyTypeLong;
  84. FOUNDATION_EXPORT NSString *const MJPropertyTypeLongLong;
  85. FOUNDATION_EXPORT NSString *const MJPropertyTypeChar;
  86. FOUNDATION_EXPORT NSString *const MJPropertyTypeBOOL1;
  87. FOUNDATION_EXPORT NSString *const MJPropertyTypeBOOL2;
  88. FOUNDATION_EXPORT NSString *const MJPropertyTypePointer;
  89. FOUNDATION_EXPORT NSString *const MJPropertyTypeIvar;
  90. FOUNDATION_EXPORT NSString *const MJPropertyTypeMethod;
  91. FOUNDATION_EXPORT NSString *const MJPropertyTypeBlock;
  92. FOUNDATION_EXPORT NSString *const MJPropertyTypeClass;
  93. FOUNDATION_EXPORT NSString *const MJPropertyTypeSEL;
  94. FOUNDATION_EXPORT NSString *const MJPropertyTypeId;
  95. #endif