メモリ管理に関する章。Leopard 以降の特徴のひとつである garbage collection についての記述が始めに来る(p.66 - 68)。その部分を読んだところ。荻原(2.0)本(CHAPTER 06)では「ガーベジコレクション」となっているけど、ここでは Xcode の日本語表記に合わせて「ガベージコレクション」としておく。
ガベージコレクションについて覚えておくこと - その1
ビルドの設定を変える(p.67)。「必須 (-fobjc-gc-only)」を選べば良い。「サポートあり (-fobjc-gc)」の方は両モードで動けるようなフレームワークだとか、プラグインを作るときに選ぶもの。
そうそう、ここでちょっと驚いたこと。ヒレガス本の p.67 には、ビルドの設定の中から GC に関する項目を探すために「情報パネル」の検索ボックスを使うように書かれている。で、それを日本語環境でやろうとすると検索語も日本語で入力しないと見つけられなかった。「Garbage」では見つからず「ガーベジ」でも見つからず(だから荻原本の記述はちょっとマズいだろ)、「ガベージ」でようやく見つかった。検索ボックスはそういうものなんだとわかれば当たり前だけどね。というか、この挙動の方が直観的か。驚く方がヒネクレているんだろう・・・orz
ヒレガスは GC に完全に頼り切る前に、一通りは従来の方式(リテインカウント方式)も知っておくべきだと言う。以下、その部分を引用。
In the future, you may decide, "This retain-count stuff is for the birds. I'm going to use the garbage collector for everything." I wouldn't blame you. For now, however, learn about the retain-count mechanism. When you study old code or anything that uses lower-level frameworks (such as CoreFoundation), you will want to understand how it works.
古いコードを調べる必要があるかもしれないし、低レベル層のフレームワーク(CoreFoundationなど)を使うことがあるかもしれない。そうなればきっと、従来の方式がどう働くのかを知りたくなるよ、と。
過渡期なんだろうけど、つまりいずれ GC を使わない Cocoa アプリはなくなって、Xcode のオプションもデフォルトで -fobjc-gc-only が付くようになる(むしろコンパイラのデフォルトが変わるかも)。それは言い換えると、プログラマが Leopard より前の OSX のことをサポートしないと決めたとき、なんだけど。「ユキちゃん(Snow Leopard)」が出る頃には Tiger はいなくなっているかね。
ガベージコレクションについて覚えておくこと - その2
オブジェクトへの参照を保持している変数には、そのオブジェクトを使わなくなった時点で、nil を代入する。従来の方式で release するようなものか。これをやらないと、たとえローカルな自動変数であってもそのスコープにいる間はオブジェクトが回収されない。
ガベージコレクションについて覚えておくこと - その3
その3はない。Chapter 4 の残りはリテインカウント方式の解説だ、と。
荻原(2.0)本から拾ってみる
p.125 から引用。
両用が可能なコードを記述するのは大変困難であり、Apple 社のドキュメントでもそのような記述は推奨されていません。どちらのメモリ管理方式を採用するか決めたら、その方式で完全に動作するようにプログラミングするべきです。
「両用」というのは従来のリテインカウント方式と GC 方式のどちらでも動くように作るという意味。
過渡期っていうのは悩ましいね。一部のパフォーマンスに対する要求が厳しいプログラムを除けば GC を使うべきだろう。ただし、その場合 Tiger 以前のユーザを切り捨てることになる。
追記@2008-06-24: 続き。
0 件のコメント:
コメントを投稿