[英]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
中沒有alloc
或copy
),因此您不能釋放它。
不用擔心keepCount是什么。 傾向於自己編織和釋放應有的對象,而不釋放不擁有的對象。
這行... anArray = [str componentsSeparatedByString:@“,”];
您壓縮了'anArray'的原始分配(因此造成了泄漏)。 在現實生活中,您首先要[anArray版本]。 這就是為什么保留數回到1的原因。
該文檔指出,保留計數不太可能提供任何有用的信息。 這不是學習保留和釋放概念的好方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.