メモリ管理
kuniです。
今日は自分が良くはまっている、メモリ管理について書きたいと思います。
retain-release-autoreleaseについては、
自動的に「autorelease」されるオブジェクトがある、
と言うことに気がつくまで、かなりの時間を費やしてしまいました。
詳しくは、
http://iphone.longearth.net/2009/01/22/【objective-c】nsdate-dateでセットした変数が参照できずエラー
http://www.tech-arts.co.jp/macosx/macosx-jp/htdocs/4600/4620.html
のサイト様辺りが非常に詳しく、ここを読んで謎が解けました。
それと似たような別件ではまってしまったのは、
UILabelにfontを設定し、それをviewに入れ、さらに配列に入れ、
後で消そうとするような流れを作っていたのですが、
(毎秒更新するような、時計などで使用)
fontは
UIFont *tempFont = [UIFont fontWithName:@"Helvetica" size:8];
の様な形で宣言しており、いわゆる「autorelease」の形で使ってしまっていたので、
あとから配列に入れていた物を、
[[tempArray objectAtIndex:i] removeFromSuperview];
で消そうとしたときに、中に入っているオブジェクトのプロパティ類には自動的に
releaseが呼ばれるようなので、
UILabelのfontのオブジェクトが参照できないよ・・?(autoreleaseされてしまっているので)
と言ったようなエラーが起こってしまっていました。多分、ですが・・
でも、
[UIFont *tempFont = [UIFont fontWithName:@"Helvetica" size:8] retain];
としたらエラーは起きなくなったので、おそらくそういう事なんだろうと思います。
