私がこのようなコードを持っているとしましょう:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
}
[pool drain];
このコードは、私ができることを示すことだけを目的としていることに注意してください。これは、私が通常行うことを単純化したものです。したがって、各反復で、新しいNSDateが割り当てられ、初期化されます。NSAutoreleasePoolはそれらをすべて排出しますか、それとも次のようにループにNSAutoreleasePoolを追加する必要がありますか?
for(unsigned int i=0;i<10;i++)
{
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
NSDate* date=[[NSDate alloc]init];
[pool drain];
}
?
また、私の本(mac os x用のココアプログラミング)ではNSAutoreleasePoolについては触れられておらず、次のように使用されています。
@autoreleasepool
{
<code>
}
この方法はNSAutoreleasePoolを使用するよりも効率的であると読みましたが、使用すると構文エラーが発生します:
「プログラム内の予期しない'@'」
なぜこれですか?
私はこのようにコードを変更しようとしました:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
[date autorelease];
}
[pool drain];
あれは正しいですか?10個の異なるオブジェクトが保持され(1までカウント)、自動解放プールに追加されると思います。メモリリークは発生していませんか?このオブジェクト数をgdbで確認する方法はありますか?