2012-03-30 32 views
4
NSArray *arr=[[NSArray alloc]init]; //Am getting all immutable objects allocation that retain count:2 
NSLog(@"dic1:%d",[arr retainCount]); 
[arr retain]; 
[arr retain]; 
[arr retain]; 
[arr release]; 
NSLog(@"dic2:%d",[arr retainCount]); 


NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];//Am getting all mutable objects allocation that retain count:1 
NSLog(@"dic3:%d",[dic retainCount]); 
[dic retain]; 
[dic retain]; 
[dic retain]; 
[dic release]; 
NSLog(@"dic4:%d",[dic retainCount]); 

OUTPUT:DIC1:2個 DIC2:4個 dic3:1個 DIC4:3保留對目標c中的可變和不可變對象的計數?

不能改變的對象之間的差異保留計數和不可變對象保留計數請給我的解決方案...

+0

retainCount沒用。不要打擾它。 – bbum 2012-03-30 13:57:24

回答

0

不要使用retainCount方法,因爲它永遠不會給出真實值,因爲對象的內部實現可能包含retain s,所以您將擁有您的retain和系統的retain s。

6

如果添加以下行

NSLog(@"%p %p %p", [NSArray new], [NSArray new], [NSArray new]); 

那麼你會發現,所有的指針值是相同的(也DIC1的是初始值上升了三個現在5開始)。這意味着[[NSArray alloc] init]實際上並沒有分配任何東西,而只是保留了一些永遠活着的單身人士並將其返回。

從不依賴於retainCount的值,因爲該對象可能由運行時和框架在內部保留。有些對象甚至可能沒有保留計數器。這也意味着你不應該期望release將可預測地導致釋放。

+0

你先生,開悟了我。不知道它會緩存這樣的數組。 – 2012-03-30 07:37:57