強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ARC対応と非対応の環境両方に対応するコードの書き方

今、何かと話題なOpenUDIDのARC対応と非対応の環境両方に対応するコードが良かったのでメモ。

https://github.com/ylechelle/OpenUDID/blob/master/OpenUDID.h

#if __has_feature(objc_arc)

#define HAS_ARC 1
#define RETAIN(_o) (_o)
#define RELEASE(_o) 
#define AUTORELEASE(_o) (_o)

#else

#define HAS_ARC 0
#define RETAIN(_o) [(_o) retain]
#define RELEASE(_o) [(_o) release]
#define AUTORELEASE(_o) [(_o) autorelease]

#endif

念の為、この記入の前にこの辺りの記述を入れておいた方が良いかな?

#ifndef __has_feature         // Optional of course.
  #define __has_feature(x) 0  // Compatibility with non-clang compilers.
#endif

関連情報

__has_feature() についての説明。

Clang Language Extensions
http://clang.llvm.org/docs/LanguageExtensions.html