2011-06-23 32 views
182

我已經下載了iOS 5 SDK,發現ARC是新Apple編譯器的一大特性。目前,許多第三方框架不支持ARC。我是否可以將ARC用於新代碼並保持當前的保留/發佈代碼不變? ARC轉換器在此不起作用,因爲某些框架(如JSONKit)無法通過轉換器轉換爲ARC。爲某些文件禁用自動引用計數

編輯:

答案是添加-fno-objc-arc到編譯器標誌你不想ARC的文件。在Xcode 4中,您可以在您的目標 - > Build Phases - > Compile Sources下執行此操作。

+2

爲了澄清,你只需將其添加到'.m'文件。不是'.h'文件。 – ma11hew28

+10

[ARC在LLVM網站上公開記錄](http://clang.llvm.org/docs/AutomaticReferenceCounting.html) –

+0

我發現了這個對話: https://github.com/gowalla/AFNetworking/issues/ 36也許它可以幫助某人如何在iOS5 ARC支持的項目中集成JSONKit ;-)但是我現在還沒有嘗試過...... – 2011-10-17 06:48:16

回答

73

The public ARC docs雖然沒有直接清楚這一點,但似乎表明,只要每個類都是ARC或全部手動管理,這些類可以集成到一個程序中。

你只能在一個類中混合使用ARC和非ARC;該文件說,通過任何方式(包括定時器和延遲執行,使用@selector)在ARC代碼中禁止發送retainreleaseautoreleaseretainCount消息。所以你不能在ARC類中做非ARC(因爲必須的消息被禁止),你不能在非ARC類中做ARC(因爲ARC添加了無ARC的無效語法元素)。

關於是否可以將非ARC庫/框架集成到ARC程序中,相同的文檔更清晰一點:是的。它沒有提到你是否可以在所有代碼都是非ARC的程序中使用ARC庫/框架,但考慮到上述所有情況,其含義似乎是肯定的。

+0

謝謝!我已經想出瞭如何爲現有的非ARC類禁用ARC。 – nonamelive

+0

你能跟我們分享你在做什麼嗎? –

+1

@David H:如果你打算向提問者說明這一點,你應該注意提問者將他們的解決方案編輯成問題。 –

35

如果您想要禁用某些文件的自動引用計數,那麼只需執行以下步驟即可輕鬆完成自動引用計數。您可以在目標 - >構建階段 - >編譯源中添加編譯器標誌。

xcode

使用的標誌是-fno-objc弧寫作之後按回車! 您必須雙擊Compiler Flags下的右列。 希望它能幫助謝謝:)

+14

您可以使用相同的方法通過使用標誌'-fobjc-arc'在非ARC項目的特定文件上**啓用** ARC。 – lnafziger

+0

無法在HEADER文件中禁用ARC編譯。 Clang不會根據其實現/方法文件的編譯來編譯接口/頭文件。因此,在混合編譯中,頭文件必須兼容ARC和非ARC。我認爲這是編譯器中的一個錯誤。 – carmin

76

這是不是很直觀如何在多禁用ARC文件,有一陣子我做一個接一個,直到想出如何做到這一點。

  1. 選擇所需文件在Target /構建階段/編譯源代碼在Xcode(CMD +單擊或Shift +單擊)
  2. PRESS ENTER(雙擊將重置選擇,所以它簡化版,工作)
  3. 類型-fno-objc弧
  4. 按Enter鍵或完成
+1

這不是真正的答案,而是一個血腥的小提示!投票+1 –

+0

你是對的,這不是,但我總是隻是搜索開關,這是答案之一。我認爲現在大多數人已經知道答案,但不是這個「提示」 – Tibidabo

0

要爲個人類,你需要去點擊Xcode中的項目後,建設階段和擴大編譯源代碼部分禁用ARC。

在右側,您會看到爲特定類添加編譯器標誌的選項。爲該類設置-fno-objc-arc將禁用ARC。

來源: Disable Automatic Reference Counting with -fno-objc-arc