Jas*_*all 6 iphone objective-c ios xcode4
在尝试打印retainCount对象后,我得到2147483647.为什么我得到这样的结果?它应该是1,不应该?
NSString *myStr = [NSString new];
NSUInteger retCount = [myStr retainCount];
NSLog(@"refCount = %u", retCount);
Run Code Online (Sandbox Code Playgroud)
2011-09-08 17:59:18.759测试[51972:207] refCount = 2147483647
我使用XCode版本4.1.尝试编译器GCC 4.2和LLVM GCC 4.2 - 相同的结果.垃圾收集选项设置为不受支持.
omz*_*omz 15
NSString在内存管理方面有点特别.字符串(像@"foo")是有效的单身人士,具有相同内容的每一个字符串是相同的对象,因为它不能被修改反正.由于[NSString new]总是创建一个无法修改的空字符串,因此您将始终获得无法释放的相同实例(因此为高retainCount).
试试这个片段:
NSString *string1 = [NSString new];
NSString *string2 = [NSString new];
NSLog(@"Memory address of string1: %p", string1);
NSLog(@"Memory address of string2: %p", string2);
Run Code Online (Sandbox Code Playgroud)
您将看到两个字符串具有相同的内存地址,因此是同一个对象.
Sil*_*vae 12
这并没有直接回答你的问题,但retainCount实际上并不是那么有用,不应该用于测试.有关详细信息,请参阅此SO帖子 何时使用-retainCount?