2010-07-20 56 views
1

當我創建initWithFormat一個的NSString,我得到一個保留的1的Objective-C:又一個保留計數問題

-(NSString *)description 
{ 
NSString *descr = [[NSString alloc] 
initWithFormat:@"I am the description."]; 

NSLog(@"Count: %lu",[descr retainCount]); 

return [descr autorelease]; 
} 

計數,如果我用initWithString,而不是我得到的2147483647

NSString *descr = [[NSString alloc] 
initWithString:@"I am the description."]; 
計數

所以這兩種方法在內存管理方面必須有所不同。這裏發生了什麼?

回答

4

首先,你不應該關心什麼保留計數,只有你是否正在妥善-release-autorelease消息平衡你-init-copy-retain消息。

這就是說,當您通過解析格式字符串創建NSString實例時,將爲其分配內存。當通過在代碼中引用常量字符串來創建字符串時,最終會得到一個指向該常量字符串的指針,並且其保留計數通常會顯示爲UINT_MAX。這是一個你不需要擔心的實現細節。

-1

@NSResponder /和世界其他地方/:不,不平衡初始化,複製和保留。 NARC是一個問題,平衡新的......,分配​​......,保留......並複製......信息就是答案!

問候