2012-08-17 40 views
1

好吧,我一直在我的項目中高興地使用ARC,直到我試圖向我的項目添加一些第三方代碼。我拖動文件夾(不是項目文件,只是一些viewcontroller源文件)。第三方代碼不是ARC,所以我做了編輯 - >重構 - >轉換到Objective-C ARC並僅選擇第三方應用中的文件轉換爲ARC。一切都順順當當,但我開始下面的警告在我以前的工作代碼:Xcode認爲我的項目不再是ARC了

TTKSoundGenerator.m:94:10: warning: '__bridge' casts have no effect when not using ARC [-Warc-bridge-casts-disallowed-in-nonarc] 
     (__bridge CFStringRef)soundFile, 
     ^~~~~~~~ 
1 warning generated. 

這是第一條線索有什麼不妥。我繼續構建並運行,並確信應用程序崩潰的地方仍然在被引用的地方發佈。因此ARC儘管在項目文件中將Objective-C自動引用計數設置爲YES,但根本不工作。

我回去做了編輯 - >重構 - >轉換到Objective-C ARC在項目中的所有文件希望糾正這一點,但沒有骰子。所以現在這個項目陷入了ARC僵局。看起來好像取消選擇文件時,重做不知何故告訴Xcode爲這些文件添加了一個特殊的「無ARC」的情況。任何想法如何解決或進一步診斷?

+1

只是一個說明。你可以啓用或禁用單個類中的弧,http://stackoverflow.com/questions/9629820/use-automatic-referencing-count-in-specific-classes-in-ios/9629853#9629853 – janusbalatbat 2012-08-17 08:49:02

+0

是的,就是這樣。我想如果您在轉換過程中取消選擇文件,Refactor會爲您提供幫助。 – 2012-08-17 09:00:06

+0

如果你可以發表你自己的答案,然後接受它,這將是非常好的,所以像我這樣的人會知道問題已經得到解答。 – 2012-08-17 12:10:28

回答

1

好了,顯然,如果你做編輯 - > Refactor->轉換成Objective-C的ARC上一個項目,只能選擇一些文件到Xcode中,然後轉換將其餘標記爲無ARC。運行編輯 - >重構 - >轉換到Objective-C ARC再次對所有文件沒有進一步的影響,一旦該選項已被設置。修復方法是轉到您的項目設置,在構建階段 - >編譯源中,選擇您希望ARC重新啓用的文件並刪除添加了重構的-fno-objc-arc編譯器標誌。

+0

更簡單的修復方法就是再次運行ARC轉換工具,這次選擇所有文件。 – 2012-11-24 11:42:47

2

沒有必要將第三方零件庫轉換爲ARC,可以在同一個項目中同時存在ARC代碼和非ARC代碼。由於你的第三部分庫不是作爲ARC編寫的,因此如果你照原樣使用它,你可以節省很多額外的工作。 (尤其是如果你需要更新的話)

我認爲如果你決定在你的項目中使用它,假設第三部分lib沒有被正確寫入ARC是公平的。

看到這個:

is it possible to combine non-ARC and ARC project code?

0

ACR轉換工具非常強大且非常方便,但更多的時候,您應該以與您想象的完全相反的方式使用它。

如果您有ARC項目,並且您添加了不符合ARC標準的類。你有兩個選擇:

1) mark the file as not using ARC (recommended for 3rd party classes) 
2) convert the file to use ARC 

弧轉換工具可以執行這些任務,因此您不必記住用於F-沒有的whatsit的語法和在何處設置手動的標誌:

對於情況1)運行該工具並勾選除了非ARC類的每個文件。 ARC轉換工具不會對已經符合ARC的文件執行任何操作,任何未選中的文件都會添加-fno-objc-arc標誌。

對於情況2)運行該工具並勾選包括新類的每個文件。ARC轉換工具現在將僅將該文件轉換爲ARC,並將其他文件保留爲獨立文件。

直觀上你會希望如果一個文件已經是ARC,你應該不要選中它,但實際上這樣做會導致ARC轉換工具使用-fno-objc-arc標誌標記這些文件。

相關問題