2012-10-22 46 views
0

可能重複:
In xcode 4.5.1 , about ios ARC爲什麼ARC中的__weak指針未設置爲零?

這裏是我的代碼(ARC)

[email protected]"aaa"; 
__weak NSString *temp= self.string1; 

NSLog(@"string1 %@",self.string1); 
NSLog(@"temp  %@",temp); 

self.string1=nil; 
NSLog(@"---after self.string1 = nil----"); 
NSLog(@"string1 %@",self.string1); 
NSLog(@"temp  %@",temp); 

我想輸出應該如下:

string1 aaa 
temp  aaa 
---after self.string1 = nil---- 
string1 (null) 
temp  (null) 

但是,當我在xcode4.5.1運行它,這讓我感到困惑

string1 aaa 
temp  aaa 
---after self.string1 = nil---- 
string1 (null) 
temp  aaa 

誰能幫助我,並告訴我,爲什麼溫度= @「AAA」(這是__weak,並且它應該是零之後,字符串1 =無)

編輯: 嗨,大家好。我們會以錯誤的方向討論嗎?也許NSLog是在覈心基礎函數參考中定義的。 ARC對核心基礎函數的參數有一些規則就像NSLog一樣?我們將_weak對象作爲參數傳遞給NSLog,它會將_weak更改爲_autorelease?

+0

那一個被關閉了,因爲網絡錯誤,我只是多次發送這個問題。它引起了一些問題,所以我再發送一次。所有人都知道關於這個問題的原因,只是給我一些建議 –

+0

它被關閉,因爲它不是一個好問題。不過我看你想編輯它,而這一次_is_一個真正的問題,這樣以來你的舊是不可能得到重新開放,我會回答它!歡迎來到堆棧溢出,有時候這是一個艱難的人羣。 – jrturton

回答

5

@"aaa"是一個編譯時間常數,將永遠不會被釋放。所以,即使你的弱指針是你唯一的東西,它仍然是一個有效的對象。

與運行時創建的字符串再試一次實驗中,使用alloc/initWithFormat:或類似的,你應該看到預期的結果。

UPDATE

已經測試了這個自己現在仍然似乎它並沒有達到預期效果。有進一步的討論這個問題here

+0

嗨,我知道什麼ü想,但我已經改變了代碼:self.string1 = [[NSString的頁頭] initWithFormat:@ 「%@」,@ 「AAA」];結果仍然顯示溫度是「aaa」。 –

+0

順便說一下,我使用xcode4.5.1(iOS6的) –

+0

我本來以爲這一點,但我被調試器揭去。但是,這是因爲我的斷點在錯誤的地方。我沒有意識到變量在最後一行的斷點之前似乎已經設置爲零。所以,這是正確的答案。用NSData嘗試這個實驗表明它立即被釋放。 – borrrden

相關問題