MacOSXでツールを作っていたときに,Instrumentsでメモリリークテストをしているときに気付いた・・・.
私の間違いだと思うのだが,気になるのでブログでも書いて反応を見てみる.
環境:MacOSX10.5.3(9D34)

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray* list = [NSMutableArray array];
int i;
for( i = 0; i <20000; i++ ){
NSString *str = [NSString stringWithFormat:@"%04d" ,i];
[list addObject:str];
}
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:list, @"NSMutalbeArray", nil];
NSString *str = [dict description];
[pool release];

これを実行するたびに,少しずつメモリがリークしていく.[dict description]をコメントアウトすると,メモリリークは起こらない.
Instrumentsを使ってもLeakでは検出できず,ObjectAllocで総量を見ていくしかない.


leak20080624.png
メモリリークしたときのスクリーンショット
notleak20080624.png
メモリリークしてないときのスクリーンショット [dict description];をコメントアウト

descriptionが怪しいと思うのだが・・・・.
http://code.google.com/p/sonson-code/source/browse/#svn/trunk/mac/dictLeakTest