汎用ライブラリ等、ARCプロジェクトでも非ARCプロジェクトでも使用する可能性のあるクラスを実装する場合、
#if !__has_feature(objc_arc) - (void)dealloc { [super dealloc]; } #endif
といった感じで "__has_feature(objc_arc)" を用いて判定を行いそれぞれの処理を書くわけですが、正直これは面倒です。
これを打開する便利なマクロを、こちらで発見しました。
下記マクロを定義しておけば、
#ifndef AH_RETAIN #if __has_feature(objc_arc) #define AH_RETAIN(x) x #define AH_RELEASE(x) #define AH_AUTORELEASE(x) x #define AH_SUPER_DEALLOC #else #define __AH_WEAK #define AH_WEAK assign #define AH_RETAIN(x) [x retain] #define AH_RELEASE(x) [x release] #define AH_AUTORELEASE(x) [x autorelease] #define AH_SUPER_DEALLOC [super dealloc] #endif #endif
こんな感じで一行かくだけで済むようになります。
AH_SUPER_DEALLOC;