前置き
iOSというかllvmでコンパイルするときのARCをソースで管理するときの話です。 この方法はMacでしかできないと思います。
結論
追記1(後で別に書くかも・・・)[Target] -> [Build Phase] -> [Compile Sources]
追記2 個人的には混在は嫌いなので、共有ものはライブラリにする方向でその中はARCのON/OFFに依存して統一して書いたのがよいと思う。
ソースで管理するなら、ライブラリを作成してそれを使用するのがいいと思いました。
判断方法
この方法が正攻法かは不明... orz#if __has_feature(objc_arc)
一応ARCの設定方法
XCode 4.2 の SingleViewApp のとき対応方法
ARC の ON/OFF 対応ようヘッダーファイルを ARCHandle.h を作成
#if __has_feature(objc_arc) #define AUTORELEASE(A) A #define ARC_ON #else #define AUTORELEASE(A) [A autorelease] #define ARC_OFF #endif
AppDelegate.m を変更
// ARC ON の時は基本的に dealloc 書かないので丸ごと削除 #ifdef ARC_OFF - (void)dealloc { [_window release]; [_viewController release]; [super dealloc]; } #endif // // マクロで autorelease を隠蔽したりしなかったり // - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = AUTORELEASE([[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ); // Override point for customization after application launch. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = AUTORELEASE([[GVViewController alloc] initWithNibName:@"GVViewController_iPhone" bundle:nil]); } else { self.viewController = AUTORELEASE([[GVViewController alloc] initWithNibName:@"GVViewController_iPad" bundle:nil]); } self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
ViewController.m を変更
UILabel に ARC ON/OFFでラベルの内容をかえてます
#if __has_feature(objc_arc) #define HELLO @"Hello ARC" #else #define HELLO @"Hello ..." #endifARC ON ARC OFF