U⁄A LABO

RSS

SEARCH

AUTHOR

  • Naoki Muramatsu (1件) Twitter:@Stryfy.

  • deco-dekai (1件) ビートダウンパートでご飯何杯も食べられます。
    ハードコア・テクニカルディレクターを目指して日々精進。

  • yanbou (6件) 犬と猫で、家が毎日運動会のフラッシュデベロッパー。
    ビールから発泡酒へ変更で節約中。

  • chikatherrsix (8件) メタル界のフラッシュデベロッパー。またある時はメタルギタリスト。オーサリング中もヘッドバンギングは絶やさない。

  • akuze (2件) 2003年からユナイティアに寄生しているフラッシュデベロッパー。
    シルクドソレイユとカナダが好き。

  • knockknock (16件) 小遣い2万円のフラッシュデベロッパー。
    帰りが遅いのにキレる嫁をだましだまし制作中・・・。

  • takaiw (18件) フラッシュデベロッパー。遊びでゲームを作るのも好きです。外見に似合わないイラストを描くのも好きです。とにかく作るのが好きです。

CATEGORY

HOME  >  CALayerのメモリ解放(メモ)

2010.09.19 takaiw

CALayerのメモリ解放(メモ)




お久しぶりの投稿です!
実は今の会社に入って、今日で丸4年になります。長いですね~。

iPhoneアプリをまだ作っているのですが(当時は4月末にアップとか
宣言していた。)、土日しか稼動できないし、アプリって意外に大変だったので
まだ完成してません。。iPhone4が出たり結構難題が増えますが、
来月くらいには何とかしたいととか思ってます。


前置きが長くなりましたが、今回はCocoaTouchの件です。
弊社もiPhoneiPadの案件に着手し始めていて、納品も済ましている案件もあったりします。
その中で、iPadでのハマッタところをメモ程度に書いておきます。

iPadでつまずいたのがやはりメモリの少なさで、そのくせ解像度がiPhoneより高いため、
画像を扱うコンテンツだとすぐにメモリを逼迫します。Objective-C側でメモリの警告が発生すると勝手に
インスタンスをリリースするため、すぐにクラッシュしてしまいます。

CALayerクラスの画像のメモリの解放についてハマッたので、メモ。

大きな画像のビューワーなので、すべての画像を読み込んでおくわけには
いきません。

下記で画像を読み込み、レイヤーに割り当てます。
1ページにCALayerインスタンスを作成していました。

インスタンス宣言
CALayer *mainImage ;

画像読み込み
UIImage *image = [UIImage imageWithContentsOfFile:@"hoge.png"];
CGImageRef imageRef = image.CGImage;
if(mainImage==nil){
	mainImage = [[CALayer layer]retain];
}
mainImage.contents = (id)imageRef;
今までは画像の解放時に
mainImage.contents = nil;
としていて、

実際パフォーマンスツールでも解放を確認できてました。
ただ、十数ページにわたった辺りから必ず落ちるようになりました。


下記のように画像の解放時にCALayerインスタンスも解放すれば直りました。
それだけでした...。
mainImage.contents = nil;
[mainImage release];

CALayerインスタンスのメモリが大きいのか、
contentsを割り当てた後にある程度の割り当ててしまっているのか
定かではありません。ご存知の方がいたら教えていただければと
思います。
UIViewとかも頻繁にreleaseしたほうがいいのかな?
Flashだと豊富なメモリに任せておきっぱなしってことが
結構ありますが。

CATEGORY