【发布时间】:2014-09-02 14:20:09
【问题描述】:
我注意到下面显示的代码发生了一些对我来说似乎很奇怪的事情,我想了解到底发生了什么以及为什么。我正在使用 ARC。
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSMutableDictionary *d1=[[NSMutableDictionary alloc]init];
NSLog(@"before loop");
for (int i=0; i<1000; i++) {
NSLog(@"looping");
}
NSLog(@"before autoreasepool block end");
}
NSLog(@"after autoreasepool block end");
return 0;
}
作为输出,我得到:
...
2014-07-11 21:48:20.637 testARC[24786:303] looping
2014-07-11 21:48:20.638 testARC[24786:303] looping
2014-07-11 21:48:20.638 testARC[24786:303] before autoreasepool block end
2014-07-11 21:48:20.638 testARC[24786:303] freed
2014-07-11 21:48:20.639 testARC[24786:303] after autoreasepool block end
在调用 d1 的 dealloc 方法时将 freed 写在哪里。
我的问题是:在我看来 d1 正在自动发布,而我认为它不应该。 如果我自己编写释放和保留调用,我会在循环之前释放 d1,而不是在自动释放块的末尾,我假设 ARC 应该做同样的事情,不是吗?
提前致谢。
【问题讨论】:
标签: objective-c automatic-ref-counting autorelease