タグ

2012年1月26日のブックマーク (3件)

  • iPhoneアプリケーション開発: Objective-Cにおけるメモリ管理

    メモリ管理の大まかな原則 C言語と共通の部分について、メモリ管理で気をつけることは特にありません。Cで気をつけることと共通です。 自分がmalloc()で確保したメモリは忘れずfree()で開放しましょうということだけです。従って、多くの場合に問題になるのはObjective-C固有の部分です。 Objective-Cのオブジェクトはretain countというものを持っています。生成すると0から1になります。 そのオブジェクトに関連付けられている変数名でretainをすれば、カウントが1増えます。 releaseをするとカウントが1減ります。run loopと呼ばれるシステムへの応答処理へ入った時、 このカウントが0になっているものはメモリ上から消えるようになっています。 autoreleaseとした場合には、適当と思われる部分で自動的に開放されるので、自分でreleaseを行う必要は

  • iPhoneアプリのメモリリーク

    Objective-Cのメモリ管理をなかなか理解できない開発者も多い気がするので、メモリリークについて不安に思っている方も多いのではないでしょうか。 iPhoneで初めてプログラミングを始めた方もいるかもしれませんので、メモリリークについて簡単に説明すると、allocしたメモリ領域をrelease(dealloc)していないとか、確保したメモリがどこからも参照されない状態になって、ゴミが残っている状態の事です。 自分も理解するまで随分と悩みました。 まずはリークがあるかテストする所から始まります。 XCodeのメニューの「実行」→「パフォーマンスツールを使って開始」→「Leaks」を選択して、「Instruments」を起動しましょう。 以下のような画面でテストできます。 今回は「おみくじ」アプリでわざとメモリリークが出るように改変してみました。 このツールを使ったテストでは以下の2点に注

    iPhoneアプリのメモリリーク
  • iOSアプリ開発のメモリ管理で気をつけること - A Day In The Life

    Objective-C での開発にだいぶ慣れてきたのですが、いまだメモリ管理まわりでハマることが多いのでまとめてみました。 メモリを確保してから解放するまでの流れ メモリを確保してから解放するまでの流れは以下の図のようになります(図はアップルのサイトから引用)。 alloc または init すると参照カウントが1になります alloc または init 系メソッドを呼ぶと参照カウントが1になります。 このように書いたのは、クラスの仕様によって alloc メソッドで retainCount が1になるオブジェクトと init 系のメソッドで retainCount が1になるオブジェクトがあるためです。alloc と init はセットで呼ばれることがほとんどなのでこの違いが問題になることはないと思いますが念のため。 int main() { /* allocで参照カウント1 */ NS