我使用以下链接来了解保留计数
retain count in iphone
根据该问题输出:
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
当我在我的示例中尝试此代码时:
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]);
然后OUTPUT
Retain count: 51
Retain count: 1
我无法理解为什么NSArray
的保留计数为51,并且在数组中赋值后它变为1。
我也读过
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
http://ranga-iphone-developer.blogspot.in/2011/11/what-is-retain-count-or-reference.html
iOS about retainCount
和其他教程。但我无法理解Retain count: 51
的价值。
请帮助我。
谢谢。
答案 0 :(得分:4)
有关何时以及为何使用retainCount
的解释,请参阅WhenToUseRetainCount.com。
由于空数组的实现细节,计数为51。它变为1,因为您获得了不同对象的计数。
如果使用manual-retain-release,则此模式是泄漏:
Foo *foo = [[Foo alloc] init];
foo = [someObject retrieveTheFooness];
分配的对象泄露。
使用ARC。