2015-09-04 78 views
1

什麼是保留計數的val和arr在下面的代碼片段?iOS保留計數

NSString *[email protected]"qaz"; 

NSMutableArray *arr=[[NSMutableArray alloc]init]; 

[arr addObject:val]; 

考慮到我們在MRC。

什麼是str1,str2,str3和str4的保留計數

NSString *str1=[[NSString alloc]initwithString:@"str"]; 

NSString * str2=[str1 copy]; 

NSString * str3=[str1 retain]; 

NSString * str4=str3; 

我很困惑與保留計數有人幫我解釋

+0

你不應該關心實際的數字。 – trojanfoe

+2

內存管理的概念需要相當多的文本來解釋,蘋果已經爲它寫了一個很好的指導; [高級內存管理編程指南](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html)。 – Mats

回答

4
NSString *[email protected]"qaz"; // @"qaz" Counting = 1, handled by val 

NSMutableArray *arr=[[NSMutableArray alloc]init]; // NSMutableArray Counting = 1, handled by arr 

[arr addObject:val]; // nothing changes 

MRC

NSString *str1=[[NSString alloc]initwithString:@"str"]; // @"str" Counting = 1 

NSString * str2=[str1 copy]; // @"str" Counting = 1; the "copy @"str"" Counting = 1 handled by str2  
NSString * str3=[str1 retain]; // @"str" Counting = 2; the "copy @"str"" Counting = 1 

NSString * str4=str3; // nothing changes 

分配/初始化,保留:增加引用計數。

複製:創建具有計數= 1另一個目的,不增加複製的對象的計數

推出:減少引用計數。

在ARC模式下,您不必調用release,只需要設置pointer = nil即可。如果沒有指針處理它,則對象將被釋放。

+0

那麼當對象的保留數增加時呢?你能解釋一些例子嗎? – NaveenKumar

+1

你可以參考@Mats的鏈接https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html – anhtu