特别是,这种代码是否总是按预期工作(其中 MyResourceGuard 是一个在其 init 方法中锁定独占资源并在其 dealloc 方法中释放锁定的对象):
NSLog(@"About to capture some exclusive resource.");
{
MyResourceGuard* guard = [MyResourceGuard new];
// Do something with the exclusive resource here.
}
// guard is out of scope, therefore its dealloc should have
// been called right away and the resource should already
// be free again at this point.
我在书籍和博客中读到,与 Java 垃圾收集相比,ARC 会在引用计数减少到零时立即销毁对象(而不是在它自己方便的某个时间),但我还没有在任何官方中读过这个Apple 提供的文档。如果这是真的,为什么我们需要 ARC 引入的新的 @autoreleasepool 关键字?
从调试中,我总是看到对象立即被释放,除非在 try-catch-block 中引发异常,在这种情况下实际上从未调用 dealloc(这是 Mac 错误,还是这些可怕的目标之一C 怪事?)。