Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2009-05-11

コンテナにオブジェクトを追加したときの参照カウンタ

03:43 | はてなブックマーク - コンテナにオブジェクトを追加したときの参照カウンタ - iPhoneアプリ開発まっしぐら★

コンテナ(NSArrayとかNSDictionary)にオブジェクトを突っ込んだとき、そのオブジェクトをreleaseすべきかどうかというのをちょっと迷ったりしたのですが、結論としてはreleaseしないといかんということが分かりました。

しかし、きっちり理解できていないと気持ち悪い部分ではあるんで、retainCountをログ出しして実際に確認しておきました。

  // objにメモリ確保
  id obj = [NSObject alloc];
  NSLog( @"1:alloc -> %d", [obj retainCount] );

  // Arrayを作り、そこにobjを追加する
  NSMutableArray* array = [[NSMutableArray alloc] init];
  [array addObject:obj];
  NSLog( @"2:Array:addObject -> %d", [obj retainCount] );

  // Dictionaryを作り、そこにobjを追加する
  NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];
  [dictionary setObject:obj forKey:@"key1"];
  NSLog( @"3:Dictionary:setObject -> %d", [obj retainCount] );

  // objの参照カウンタをデクリメント
  [obj release];
  NSLog( @"4:release -> %d", [obj retainCount] );

  // NSMutableArrayの解放
  [array release];
  NSLog( @"5:Array:release -> %d", [obj retainCount] );

  // NSMutableDictionaryの解放
  [dictionary release];

この実行結果は以下のとおり。

1:alloc -> 1
2:Array:addObject -> 2
3:Dictionary:setObject -> 3
4:release -> 2
5:Array:release -> 1

おー、コンテナにaddした時点で、きっちり参照カウンタインクリメントされてますね^^

これで安心してreleaseできます(笑)

onkklulohtonkkluloht 2014/01/20 01:28 hphscjqipof.efw, <a href="http://www.ggejrykdlj.com/">arktrovrzv</a>

wdbxnjfiftwdbxnjfift 2014/01/22 15:51 zhhhjjqipof.efw, <a href="http://www.jtiqcaltou.com/">wfsedcdwwu</a>

xmeyweiimxxmeyweiimx 2014/01/25 19:14 rdjyijqipof.efw, http://www.sopdjvpmqd.com/ ivadkeutub

jnspmfkdptjnspmfkdpt 2014/02/02 00:51 gfzlfjqipof.efw, <a href="http://www.vahmpzhlpf.com/">cxvrtfowan</a> , [url=http://www.sobvujilaj.com/]rauhienzkh[/url], http://www.goqfnqqmgt.com/ cxvrtfowan

ゲスト