特に、この種のコードは常に意図したとおりに機能しますか (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 で例外が発生した場合を除いて、オブジェクトがすぐに解放されるのを常に見てきました。 C奇妙なこと?)。