2012-06-18 100 views
0

我正在閱讀有關ARC的文檔,並遇到了一個困惑我的部分。請任何人都可以幫助我。 我有兩個問題: 1.I知道ARC發佈對象時沒有變量指向it.Now假設我有一些方法,說:(* NSString的)returnString,其返回類型爲NSString的,所以會發生什麼變量,在方法returnString中聲明嗎?我知道當接收變量超出了調用returnString的方法範圍時,它會得到釋放,但是returnString中的變量會發生什麼。使用ARC時如何釋放內存?

-(NSSTring *)returnString 
{ 
    NSString *str = //Some value; 

    return str;//What will happen to this. 
} 

和 其他方法:如果returnString是在未與ARC整理了一些第三方庫

-(void)useString 
{ 
    NSString *str1 = [self returnString]; //It will get release when this method gets over. 
} 

2.什麼會發生?

回答

0

關於第一個問題,ARC將保持和釋放對你的照顧。任何時候你仍然保持對一個變量的引用,ARC應該堅持它。在您的具體示例中,字符串可能會作爲自動發佈的對象返回,但實際的實現對您是隱藏的。

關於第二個問題,你可以標記庫,以保持手動保留/釋放未使用ARC。爲此,請參閱此問題:ios5 ARC what is the compiler flag to exclude a file from ARC?

+0

感謝您的答覆。我得到了第一個答案。但對於第二個問題,你的意思是說,我需要在第二種情況下手動autorelease str? –

+0

如果一個文件被標記爲「-fno-objc-arc」,那麼你仍然需要手動保留/釋放/自動釋放。 – kevboh

2

ARC剛剛插入[... retain][... release]方法在編譯時調用。在你的情況下,它看到'str'是一個局部變量,並在你的聲明之後添加一個autorelease方法調用。所以真的,內存以相同的方式被釋放,但你不必擔心,ARC會爲你做。

+0

編譯器會在添加'-retain','-release'和'-autorelease'後執行並優化代碼,因此可以添加大量代碼即使在通話期間也可以再次移除很少的對象會在autorelease池中結束。 – hypercrypt