Objective c iOS ARC_objc_rootRetainCount
Xcode8,macos10.12。弧 我创建了一个MacOS命令行工具项目 这里是Objective c iOS ARC_objc_rootRetainCount,objective-c,macos,automatic-ref-counting,retaincount,Objective C,Macos,Automatic Ref Counting,Retaincount,Xcode8,macos10.12。弧 我创建了一个MacOS命令行工具项目 这里是主功能 int main(int argc, const char * argv[]) { @autoreleasepool { id array = [[NSMutableArray alloc] init]; NSLog(@"array count is %lu", _objc_rootRetainCount(array)); _
主功能
int main(int argc, const char * argv[]) {
@autoreleasepool {
id array = [[NSMutableArray alloc] init];
NSLog(@"array count is %lu", _objc_rootRetainCount(array));
_objc_autoreleasePoolPrint();
}
return 0;
}
结果如预期:
数组的重新计数为1,并且数组未注册到自动释放池
但是当我使用id-array=[NSMutableArray]
时。结果发生了变化,并不像预期的那样
数组的重新计数为2,并且数组已注册到自动释放池
看起来这两个函数(objc\u retainAutoreleaseReturnValue
和objc\u retainAutoreleasedReturnValue
)不起作用
现在我创建了一个iOS应用程序。下面是viewDidLoad中的代码
- (void)viewDidLoad {
// id __weak tmp = nil;
id array = [NSMutableArray array];
NSLog(@"%lu", _objc_rootRetainCount(array));
}
数组的重新计数为1
但是如果我取消了对行的注释
id\uu弱tmp=nil代码>,结果更改为2。非常奇怪。方便的初始值设定项返回一个自动释放的对象,因此您有alloc init
中的保留计数,加上一个弧,以确保数组一直存在到代码中的最后一个引用。@Cristik我想当我使用id array=[NSMutableArray]
返回对象不应是自动删除的对象。由于objc\u retainutorereleasereturnvalue
和objc\u retainutorereleasereturnvalue
@vanney,[NSMutableArray array]
是[[NSMutableArray alloc]init]自动释放]
事件的缩写,尽管自动释放
不再可用。@Cristik。在ARC下,编译器和运行时相互协作,以避免在自动释放池中丢弃对象。所有这些都是实现细节,最终,重新计算是完全无用的。