text: //  代码地址: https://github.com/CoderMJLee/MJRefresh
  //  代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
  #import <UIKit/UIKit.h>
  #import <objc/message.h>
  
  // 弱引用
  #define MJWeakSelf __weak typeof(self) weakSelf = self;
  
  // 日志输出
  #ifdef DEBUG
  #define MJRefreshLog(...) NSLog(__VA_ARGS__)
  #else
  #define MJRefreshLog(...)
  #endif
  
  // 过期提醒
  #define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
  
  // 运行时objc_msgSend
  #define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
  #define MJRefreshMsgTarget(target) (__bridge void *)(target)
  
  // RGB颜色
  #define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
  
  // 文字颜色
  #define MJRefreshLabelTextColor MJRefreshColor(105, 105, 105)
  
  // 字体大小
  #define MJRefreshLabelFont [UIFont boldsystemFont:14]
  
  // 图片路径
  #define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
  #define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
  
  // 常量
  UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
  UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
  UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
  UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration;
  
  UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset;
  UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize;
  UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset;
  UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState;
  
  UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey;
  
  UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText;
  UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText;
  UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText;
  
  UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText;
  UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText;
  UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText;
  
  UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText;
  UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText;
  UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
  UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
  
  // 状态检查
  #define MJRefreshCheckState \
  MJRefreshState oldState = self.state; \
  if (state == oldState) return; \
  [super setState:state];
  