2013-08-07 50 views
-2

我真的和代碼混淆了,我的問題是爲什麼我在釋放後獲得變量的值。發佈NSInteger類型變量

NSNumber *a=[[NSNumber alloc]initWithInt:2]; 
NSNumber *b=[[NSNumber alloc]initWithInt:3]; 
b=a; 

[a release]; 
[b release]; 
NSLog(@"a=%@",a); 
NSLog(@"b=%@",b); 

OUTPUT:A = 2 B = 2時,我分配veriables

1保留計數的增量,我沒有其他的代碼,其中保留計數increments.So我的問題是釋放消息後保留計數將爲0,並且對象將被釋放,我不應該得到該值。 ///////////////////////////////////////////////// ///////////////// 大家好,我找到了答案,但它背後的邏輯不清楚,如果我把整數之後的「我」給它所需的輸出請你幫忙。

NSNumber *a=[[NSNumber alloc]initWithInt:2I]; 
NSNumber *b=[[NSNumber alloc]initWithInt:3I]; 
b=a; 

[a release]; 
[b release]; 

NSLog(@"a=%@",a); 
NSLog(@"b=%@",b); 

OUTPUT:A = 0 B = 0

+1

因爲您沒有使用搜索。 (這是***昨天問的。)另外,我在這裏看不到'NSInteger'。 (不是說你可以發佈'NSInteger',但是stil ...) – 2013-08-07 05:18:27

+1

[confused about ios release&dealloc]可能的重複(http://stackoverflow.com/questions/18080139/confused-about-ios-release- dealloc) – borrrden

+0

你可能會發現重複,因爲我仍然感到困惑。 – Parinita

回答

1

當在對象上發送釋放消息時,對象實際上不從存儲器中刪除。發佈消息只是將引用計數減1。如果引用計數爲零,則該對象被標記爲空閒。然後系統將其從內存中移除。在這個釋放之前,你可以訪問你的對象。即使你釋放了對象,你的對象指針仍然指向對象,除非你將指針指定爲零。

+0

感謝您的回答,在這裏,當我分配veriables保留計數增量1時,我沒有其他代碼保留計數遞增。所以我的問題是釋放後留言保留計數將爲0和對象將被釋放,我應該沒有得到價值。 – Parinita

+0

@Pradeep我認爲你的答案不正確。這裏的對象正在被釋放。事實上,即使釋放也不意味着「從記憶中移除」。 – 2013-08-07 06:37:50