FC2ブログ

リファレンス・カウンター

iPhone開発で必ずと言って良いぐらい登場する事柄に、「リファレンス・カウンター」というものがあります。

これはメモリ管理に使用する仕組みなのですが、私はObjective-Cで初めて遭遇しました。

メモリリーク(メモリの無駄遣い)を防ぐためには、参照がなくなったオブジェクト(が使用しているメモリ)を把握し、こまめに解放してあげる必要があります。

Objective-C 2.0には、これを自動でやってくれる、ガベージ・コレクティング(GC)機能があるのですが、恐らくリソース的な制約からか、今のところiPhone開発ではGCが使えません。

そこで、Objective-C従来の手法である、リファレンス・カウンター方式を使うわけです。

仕組みは簡単で、オブジェクトのインスタンスそれぞれに、自身が参照されている回数を保持させ、それが0になったら当該メモリを解放するというものです。

基本的に、retainというメソッドでカウンタを増やし、releaseメソッドでカウンタを減らします。(代入時に自動的にretainしてくれるモードもある。)

でも今まで、他の言語で、GCの便利さにすっかり慣れきっていると、リファレンスカウンターのような、わりと簡単な仕組みでも、最初、不便に感じることもあります。

例えば、「release」というメソッド名は、個人的にはちょっと頂けないように思います。

いかにもそこでメモリを解放しているような感じなので、勉強を始めて初期のころは、
[object release];
という行のあとで、普通にobjectを参照しているコードとか見て、「これなんでクラッシュしないのかな・・・」と、首をかしげたものです。(^^;)(release後にカウンタが残っていることが確実な場合は、こういうことも可能なわけなんですね。)

・・・もっとも、本来、メモリ管理はもっとネイティブに行われてきたものなのですから、リファレンスカウンターが使えるだけでも、感謝しないといけませんよね(^^)。

コメント

No title

遅れましたが、作者さん明けましておめでとうございます。

作者さんの方は着実に開発の勉強をされているようですね。自分もいろいろ学ばないとなぁ・・・最近新型インフルエンザに感染していたものですから、PCには触れられない日が続きました。

作者さんも体調には気を付け下さいね。(48時間以内服用のタミフルの効き目は凄いですね~飲んだら数時間で熱が下がりました。びっくりです。)
ttp://allabout.co.jp/health/medicine/closeup/CU20051115A/

それでは、今年も宜しくお願い致します。

No title

サンエタさん
あけましておめでとうございます!

インフルエンザですかーー!
それは大変でしたね。。
私の周囲でも結構罹患してます。
タミフルなどの抗ウイルス剤は早めに
投与するとよく効くらしいですね。
ともあれ、熱も下がって良かったです。
今年もどうぞ宜しくです!(^^)

あっそれから、Twitterフォローさせて頂きました(^^)

No title

 インフルエンザが来ましたか。
 俺は流行にはニブイくせに、インフルエンザは素早くかかっちゃいまいた。
 このインフルエンザは肺というか気管に来ますね。
 お大事にです。

>ガベージ・コレクティング
 昔のBASICのガベージコレクションは厳しかったですね。
 始まると何分も動作が止まっちゃった。
 C#なんかもガベージコレクションするらしいけど、こいつは止まらないんだろうか?

 メモリ管理は全部自分でやらないと落ち着かないんだけど、もうそんな時代じゃないんでしょうね~

No title

>あっそれから、Twitterフォローさせて頂きました(^^)

すいません。フォローいただいたとの事ですが、作者さんのTwitterアカウントがどれかわからないです^^;
差し支え無ければ教えていただければと思います。

Re: No title

>Mooさん

Mooさんもインフルエンザにかかってたのですかー!
私の周囲も増えていますが、治った人はもう新型のワクチン要らないので
なんかうらやましい気もします。(^^;)
でも確かに重症化すると怖い病気ですよね。本当にお大事に・・・。

> >ガベージ・コレクティング
>  昔のBASICのガベージコレクションは厳しかったですね。
>  始まると何分も動作が止まっちゃった。
>  C#なんかもガベージコレクションするらしいけど、こいつは止まらないんだろうか?

GCも言語によっていろいろ性能とかがあるようですね~。
その昔、Javaプログラムの動作が妙におそいなとおもったら
GCが原因だったことがありました・・・。

>  メモリ管理は全部自分でやらないと落ち着かないんだけど、もうそんな時代じゃないんでしょうね~

今はPC向きのソフトだと、メモリ管理を
意識しないでも良い環境が多いですよね~。
もっとも、メモリ管理を明示的に行ったプログラムは
やはりパフォーマンスが良いですよね。(^^)

Re: No title

>サンエタさん

> >あっそれから、Twitterフォローさせて頂きました(^^)
>
> すいません。フォローいただいたとの事ですが、作者さんのTwitterアカウントがどれかわからないです^^;
> 差し支え無ければ教えていただければと思います。

私のアカウントは「Sakusha」です~(^^)
正月に箱根ネタを連投して以来、
最近はリードオンリー気味になってます・・・。(^^;)

No title

なるほど~わかりました。作者さんが現在フォローされている「kizinn」は自分ではありませんね。昔はそのアカウントでしたが、サイト移転と共にアカウントを変更しました。現在は「3et」です。

それにしても・・・Twitterでは一度破棄したアカウントでも別の人が使うことが出来るんですね・・・気をつけないとなぁ・・・

というわけで、フォローさせていただきました。ちなみにブラウザからでしたら、FirefoxアドオンのEchofonなどがオススメですよ~。このアドオンを導入してからTwitterがより楽しくなりましたので、オススメです。

それではよろしくお願いします。

Re: No title

> サンエタさん

> なるほど~わかりました。作者さんが現在フォローされている「kizinn」は自分ではありませんね。昔はそのアカウントでしたが、サイト移転と共にアカウントを変更しました。現在は「3et」です。

さっそくフォローしましたー。

> それにしても・・・Twitterでは一度破棄したアカウントでも別の人が使うことが出来るんですね・・・気をつけないとなぁ・・・

うお、そうだったのですか、、
名前を変えるときは注意が必要なのですね・・・。
>
> というわけで、フォローさせていただきました。ちなみにブラウザからでしたら、FirefoxアドオンのEchofonなどがオススメですよ~。このアドオンを導入してからTwitterがより楽しくなりましたので、オススメです。

情報ありがとうございます!
私は今は主にiPhoneでやっているのですが、
ブラウザからの時は使いたいと思います(^^)

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)