在Xcode 4.2中,retainCount发生了什么?

gN0*_*0Me 0 ios retaincount xcode4.2 automatic-ref-counting

我注意到在将我的Xcode更新为4.2之后,retainCount总是等于-1.我不在我的项目中使用ARC,我甚至尝试在项目设置中创建新项目并将ARC选项切换为关闭,但下一行的工作非常奇怪:

NSString *string = [[NSString alloc] init];
NSLog(@"%i", [string retainCount]);   //-1
[string retain];
[string retain];
[string retain];
NSLog(@"%i", [string retainCount]);   //still -1
[string release];
[string release];
[string release];
NSLog(@"%i", [string retainCount]);   //still -1
Run Code Online (Sandbox Code Playgroud)

我想念一下吗?我认为如果关闭ARC选项,项目将像以前一样完全正常工作.

Lil*_*ard 6

首先,让我先说一下,如果你打电话retainCount,你可能做错了.这种方法应该只供人们编写低级框架代码使用,即使只有在调试时才能使用.对象可能会被保留并在您的背后自动释放,因此调用-retainCount非常容易让人误解.

无论如何,我怀疑答案[[NSString alloc] init]是返回一个单例对象.它是不可变的,而且是空的,所以当它刚刚返回时,它真的没有理由为它创建一个全新的字符串@"".

  • 解释是正确的,但我不同意retainCount:它永远不应该被调用.它应该在很久以前被删除了. (2认同)