その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

ARC 有効/無効に両対応させたい場合に便利なマクロ

汎用ライブラリ等、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;