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