簡體   English   中英

在iPhone中保留計數

[英]retain count in iphone

我已經使用[anArray retainCount]來獲取數組的保留計數。(我知道這不應該使用,但是我只是用於學習保留概念)

以下是我的代碼。


NSString *str = [[NSString alloc] initWithFormat:@"a,b,c,d"];
NSArray  *anArray =[[NSArray alloc]init];
NSLog(@"Retain count: %i", [anArray retainCount]);
anArray=[str componentsSeparatedByString:@","];
NSLog(@"Retain count: %i", [anArray retainCount]);  

輸出

Retain count: 2
Retain count: 1

我認為應該相反,但是...

請幫個忙, 不要着眼於retainCount嘗試學習內存管理規則的工作方式。 相反,請參閱友好的《 Apple 內存管理指南》

在您的示例中:

 NSArray  *anArray =[[NSArray alloc]init];

您已經分配了“ anArray”(通過調用alloc ),因此您有責任調用release

anArray=[str componentsSeparatedByString:@","];

現在,您已經獲得了一個新對象(如肖恩所說,泄漏了原始對象)。 這次,您不擁有該對象(因為componentsSeparatedByString中沒有alloccopy ),因此您不能釋放它。

不用擔心keepCount是什么。 傾向於自己編織和釋放應有的對象,而不釋放不擁有的對象。

這行... anArray = [str componentsSeparatedByString:@“,”];

您壓縮了'anArray'的原始分配(因此造成了泄漏)。 在現實生活中,您首先要[anArray版本]。 這就是為什么保留數回到1的原因。

該文檔指出,保留計數不太可能提供任何有用的信息。 不是學習保留和釋放概念的好方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM