2013-02-07 44 views
7

我正在修改非ARC的open source app。我的大部分iOS體驗都是使用ARC啓用的objective-c,所以當我創建並向項目添加新文件時,我傾向於使用compiler flags(特別是當我面對奇怪的非弧代碼bugs)時使它們符合ARC。在同一個iOS項目中混合使用ARC和非ARC代碼有多安全?

讓我在夜間遇到的問題是:在我的項目中混合使用弧和非弧代碼的安全性和可靠性如何?當質量保證時間到來時,測試內存泄漏和性能等問題會成爲一場噩夢嗎?問另一種方式..是否值得將現有的非弧代碼轉換爲弧代碼並擺脫潛在的麻煩?

+0

這些是編譯器標誌,而不是鏈接器標誌。此外,使用ARC並不能免除您需要測試應用程序的泄漏和性能。 –

+0

我的壞..修正.. – abbood

回答

9

您可以自由混合,沒有任何問題。

+0

是的,的確,這是你需要的所有答案。有一個警告(關於預編譯代碼的命名規則很差,會導致ARC過度釋放),但我認爲這不適用於這種情況。 – borrrden

+0

err ..以及我非常尊重你們,我承認你們的技術經驗..我希望得到一些證據或文件?或者僅僅是基於個人經驗的答案(它本身仍然足夠) – abbood

+1

@abbood - ARC不是魔術,它只是在編譯時查看代碼並添加必要的保留和發佈。生成的代碼與您自己編寫的代碼沒有區別。從[過渡到ARC發行說明](https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226): 「如果對某些文件使用手動引用計數更方便,也可以選擇在每個文件基礎上使用ARC。」 – sosborn

0

我不覺得,因爲當ARC是這樣打開的這個方法有些代碼是被禁止它的安全:釋放時

- (void)dealloc 
{ 
    [super dealloc]; 
} 

,當然還有:

[exampleVariable release]; 

可以用於本在非ARC項目中。

+0

我的問題是假設所有這些非安全代碼已經被計入(即取出) – abbood

+1

那麼在這種情況下,它是完全安全的,因爲這是唯一重要的事情。 – 2013-02-07 10:34:58

+1

會不會計算非ARC代碼實質上使其ARC代碼? – devios1

相關問題