0

我注意到在将我的 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 选项,项目将像以前一样工作。

4

1 回答 1

6

首先,让我先说如果你打电话给retainCount,你可能做错了什么。这种方法应该只供编写低级框架代码的人使用,即使那样也只能在调试时使用。对象可能会在你背后被保留和自动释放,这样调用-retainCount就非常具有误导性。

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

于 2011-11-02T20:49:37.690 回答