text: //
  //  FRKitMacro.h
  //  V2EX_25K
  //
  //  Created by coldmn3 on 16/9/2.
  //  Copyright © 2016年 From Scratch. All rights reserved.
  //
  
  #ifndef FRKitMacro_h
  #define FRKitMacro_h
  
  /**
   Synthsize a weak or strong reference.
   
   Example:
   @weakify(self)
   [self doSomething^{
   @strongify(self)
   if (!self) return;
   ...
   }];
   
   */
  #ifndef weakify
      #if DEBUG
          #if __has_feature(objc_arc)
          #define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
          #else
          #define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
          #endif
      #else
          #if __has_feature(objc_arc)
          #define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
          #else
          #define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
          #endif
      #endif
  #endif
  
  #ifndef strongify
      #if DEBUG
          #if __has_feature(objc_arc)
          #define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
          #else
          #define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;
          #endif
      #else
          #if __has_feature(objc_arc)
          #define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;
          #else
          #define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;
          #endif
      #endif
  #endif
  
  #endif /* FRKitMacro_h */
  