配列や辞書(dictionary)周りのメモリ管理について。
メモリリークしないために、オブジェクト生成にメモリを確保(alloc)したら、
deallocでリリース(release)するのが基本だが、
配列・辞書にオブジェクトを格納して管理しようとする場合に、
allocやらretainやらreleaseは必要になるのか?という話。
stackoverflowでわかりやすい説明を発見。
http://stackoverflow.com/questions/885839/with-an-nsarray-of-object-references-do-i-explicitly-release-all-objects-in-the
結論から言うと、配列の中に格納したオブジェクトに関しては、
★allocなりretainなりでリテインカウントを上げる必要がある。
★配列をreleaseしたときに、中のオブジェクトも自動でreleaseされる。
例えばこんな具合。
//配列をグローバル変数にする為にリテインカウントを1上げる。mojilabelArray = [[NSMutableArray alloc] init];//配列に格納するオブジェクトに関してもリテインカウントを1あげる。CCLabelTTF *ttllabel = [[CCLabelTTF labelWithString:moji fontName:@"Arial" fontSize:50] retain];[mojilabelArray addObject:ttllabel];//dealloc[mojilabelArray release];//ttllabelはmojilabelArrayがreleaseされたとき、同時にreleaseされる。
0 件のコメント:
コメントを投稿