iPhoneのPDF読み込みのメモリ解放について

2014年9月9日

xcode

スーパームーンって言うので、ジョギングがてら、空見てみた。 綺麗に丸い月が出ていたが、そんなに大きいとは思わんかったな。 どのへんがスーパーなのか??? 1ヶ月ほど、欲しいアプリの1位だった、PDFのリーダーアプリで、欲しい機能を付けた読書アプリを作ってみて、朝、会社に出勤する時にデバッグがてら、ユーザー気分で使ってみた。 すると、ある一定の時間使うと、アプリ内でPDFののページが読み込まれなくなったり、アプリがプッツリと落ちる不具合に何度か遭遇した。 経験上、こればメモリ障害ということはすぐに分かった。 xcodeにiPhone端末をつないでいた時に、ビジュアルデバッガでのメモリ値も、ページをめくるたびに、増加していたことは、よく覚えている。 やはりモバイル端末、なんと非力なことか・・・ とはいっても、こういうメモリリーク系は、ちゃんと対応しないと、使用しているとストレスがたまるアプリになってしまい、使いづらいと言われる事間違いなしという事なので、真摯に対応する事にした。 調べてみると、やはりメモリ解放ができていないっぽい。 iOS5ぐらいから、autoreleaseがいらなくなったので、メモリって自動で開放されているんだろうとフレームワークをあまりにも信用しきっていたが、objective-cはそうではないらしい。 結論から言うと、PDFのを使っている場合に限って、下のようなコードが必要なようだ。 CGPDFDocumentRef docs = CGPDFDocumentCreateWithURL((CFURLRef)url); ----- NSNumber *num = [NSNumber numberWithInt:(int)CGPDFDocumentGetNumberOfPages(docs)]; //メモリ解放(※ここが必要) CGPDFDocumentRelease(docs); ----- PDFのドキュメントを開いて、作業後、ちゃんと閉じてあげないと行けないってことね。 ちなみに、ページを読み込んだ後に、 CGPDFPageRelease(page); が必要なのかと書いたところ、バグという風にデバッガに怒られてしまった。 どうやら、ドキュメントの開放だけでいいみたい。 とりあえず、ココ参考にしました。