2012年11月16日金曜日

メモリ管理

素人目だが、どうも第3章メモリ管理は間違ってるように見える。

p69 中程のコード

[p release]

これが

Possession *p = [Possession alloc] init];

だったらどうするのか?
他の例に習えばreleaseするはず。

「自分の所有しないオブジェクトを解放しない」というのが、何か例外を発生させるような問題なのか、それとも作法の問題なのか、今ひとつ明確に答えていない。

ここでは結局autoreleaseを使うということで決着しているが、そうしないと例外が起きるのかどうかは書いていない。

それにautoreleaseが送信されるとNSAutoReleasePoolのインスタンスに追加される場合、保持カウントは1になっている記述があるが、P71では「配列が保持して保持カウントが1になります」とあり、カウントされていないような記述になっている。無茶苦茶だ。

この本はここまでいい調子で来ただけに、この章の出だしの例えが酷過ぎる辺りからして、著者はイマイチ自信がないんだと思う。勝手な推測だが。

実は3rd edition(英語版)をkindle本で買ったのだが、この部分はすっかりARC対応になっていて、すべて書き変わっているので、今更かもしれない。

まあメモリ管理は重要だけど、根本的なことなので、飛ばしても最後に分かれば問題ないと思う。最後に分かれば、だよ。

0 件のコメント:

コメントを投稿