2012年8月20日月曜日

ZenCodingショートカットまとめ


Command+Eで展開

HTML5 → html:5
HTML4.01Transisional → html:4t
HTML4.01Strict → html:4s
CSS → link:css
JavaScript → script:src


2012年4月28日土曜日

[Objective-C]配列にオブジェクトを格納する場合のメモリ管理

★iPhoneプログラミングのTips★

配列や辞書(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される。