我注意到在将我的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
我想念一下吗?我认为如果关闭ARC选项,项目将像以前一样完全正常工作..
答案 0 :(得分:6)
首先,让我先说一下,如果你打电话给retainCount
,你可能会做错事。这种方法应该只供人们编写低级框架代码使用,即使只有在调试时才能使用。对象可能会被保留并在您的背后自动释放,因此调用-retainCount
会产生误导。
无论如何,我怀疑答案是[[NSString alloc] init]
正在返回一个单例对象。它是不可变的,空的,所以当它只能返回@""
时,它真的没有理由为它创建一个全新的字符串。