ios - Xcode 4.2 中的 retainCount 发生了什么?

标签 ios xcode4.2 automatic-ref-counting retaincount

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

最佳答案

首先,让我先说明一下,如果您正在调用 retainCount,您可能做错了什么。这种方法应该只被编写低级框架代码的人使用,甚至只有在调试时才使用。对象可能会在您背后被保留和自动释放,因此调用 -retainCount 会产生误导。

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

关于ios - Xcode 4.2 中的 retainCount 发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987030/

相关文章:

ios - 引用 TableView 单元格时出错

ios4 - 使用 Core Data 并在 insertMethod 应用程序中崩溃并给出 NSInternalInconsistencyException 和错误消息 Context already has a coordinator

ios - FBConnect - #import "FBConnect/FBConnect.h"没有这样的文件或目录

objective-c - 与 ARC 不一致的对象释放?

ios - 在 `-dealloc` 内部调用的异步方法可能会生成不需要的僵尸对象

iphone - 如何将选定的数组从一个 uitable 传递到另一个 uitable

ios - Swift:访问通过post请求收到的JSON

iphone - UITableView 顶部的 UISearchBar 可以隐藏但靠近 UINavigationBar

objective-c - Xcode 池耗尽?

ios - 当使用 ARC 从 UIView 调用 dealloc 时,我可以假设 ivars 仍然保留吗?