iPhone&Androidプログラミング記
英語─上達しないのは努力不足が原因ではなかった!
英語が話せない…を解決する博士開発の噂の英語教材!返品保証付!

2009年05月15日

UIImageを戻り値として返す時に気を付けないといけない事

UIImageを戻り値として返す場合、そのUIImageが「initWith〜」の形式でallocしているのは推奨されていないようです。

例えばこんな書き方。


- (UIImage*) getImageFromNumber:(int)number
{
//画像ファイルの読み込み
return [[UIImage alloc] initWithContentsOfFile:imagePath[number]];
}


なぜダメなのかということはよく分からないのですが、allocの際にretainされるので、retainされたままreturnするのは良くないよ。
という事のようです。
iPhone OS ではガーベジコレクションが採用されていないため、メモリ管理はretainとreleaseによって行われます。
なので、この辺りには気を使わないといけないです。

で、じゃあどう書けばいいんだ?という事になります。

メソッドにはallocをしながらインスタンスを作成してくれるメソッドがあります。
メソッドの前に「+」で宣言されている物です。
allocされないのは「ー」です。

UIImageについてAPIリファレンスを検索すると「+」のメソッドがあるのが分かると思います。
「imageWith〜」で始まるメソッドです。

という事で、以下の様に書くのが正しいです。


- (UIImage*) getImageFromNumber:(int)number
{
//画像ファイルの読み込み
return [UIImage imageWithContentsOfFile:imagePath[number]];
}


なかなかメモリ管理するのは大変ですが、こういった細かい部分が品質の向上につながると思うので、きっちりやっておかないといけないですね。


2009.05.18 追記
kudaraさんからのコメントの通り、以下のようにautoreleaseを付けておけば大丈夫でした。


- (UIImage*) getImageFromNumber:(int)number
{
//画像ファイルの読み込み
return [[[UIImage alloc] initWithContentsOfFile:imagePath[number]] autorelease];
}


ご指摘ありがとうございました。

Sony Style(ソニースタイル)


posted by ラキシス at 19:10 | Comment(2) | TrackBack(0) | iPhoneプログラミング | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。