今回は @autoreleasepool の話。
と言っても、私はこれに関して大して詳しくない。
『オートリリースプールの使い方と基本』という素晴らしくよくまとまった記事があるので、そちらを参照してください。
オートリリースプールは通常、裏で自動的に生成・破棄されているので、基本的には意識しないで autorelease が利用できるようになっています。
ただし、無造作に独立して動いている訳ではないので、処理を長くキープし続けるような場面では、意図的にオートリリースプールを解放してあげないと、解放待ちのインスタンスでメモリが溢れてしまう危険性があります。
という解説の後に、以下のようなサンプルコードが提示されている。
// 長いループの中でオートリリースプールを生成することで、解放待ちのインスタンスが溜まってしまうのを防ぎます。
while (!isCancelled)
{
@autoreleasepool
{
// この中で生成された autorelease なインスタンスは…
self.label.text = [NSString stringWithFormat:@"Step: %d", self.step];
}
// 次のループ処理に入る前に release されます。
}
Xcode で Objective-C のプロジェクトを生成されると、もれなく

と @autoreleasepool{} がついてくるが、なるほど、こういう理屈だったわけですか。
