いよいよ本屋に並びますね。
 で、かねてから伝えてたとおり「Xcode3の補足説明」のPDFは以下からダウンロードできます。

iOSデバッグ&最適化技法 for iPad/iPhoneサポートページ

 ほんと、皆さん、お手数おかけします。
 
 ということで、前回の続き。
 Chapter-3では自動解放機構の存在が判明するわけですが、じゃ、いったいどういう機構なんだということで、Chapter-4に突入します。
NSAutoreleasePool

 ですわ。
 Appleのサンプルソースなんかでたまに見かけるというかmain関数にいつでもいますよ~な、このオブジェクトの正体はautoreleaseを実現するための装置なわけでして、このオブジェクトを一定の区間で作って解放する事で、自動解放機構が実現されてるんだという話をAppleのドキュメント

Cocoaメモリ管理プログラミングガイド

 を引用しながら、ダミーのクラス(NSObjectを継承してdeallocメソッドをオーバーライド、ただしやってるのはsuperにdeallocメッセージを投げるだけ)を用意してdeallocメソッドにブレークポイントを設置、NSAutoreleasePoolオブジェクトの解放との連動具合を実際に確認したりします。
 で、まあ、その過程で「Cocoaメモリ管理プログラミングガイド」で記述されている[NSString stringWidthFormat…]が簡易コンストラクタと呼ばれる事、そしてCocoaメモリ管理の肝である
1.alloc、new、copy以外で始まるメッセージで生成されたオブジェクトは、放って おけば自動的に解放される。
2.もしそのようなオブジェクトで自動的に解放されては困る場合はretainを呼ぶ。
3.alloc、new、copyで始まるメッセージで生成したオブジェクトを自動的に解放したいならautoreleaseメッセージを送る。
4.retain、releaseは参照カウントを即座に増減させるが、autoreleaseは遅延して参照カウントを減らす。

 を発見するに至るわけです。

 たいがい、このルールを破った事でハングアップしてるわけですよ。

 ということで、やれやれretain問題は一段落なんだけど、retainしたらreleaseしないといけないわけで、Chapter-2でretainしたNSStringオブジェクトは最終的にリークしちゃうわけです。
 これがChapter-5のテーマ
いかにしてメモリリークをみつけるか

 に繋がっていくわけですな。
instruments

 ですよ。「iPhoneアプリ開発、その(161) 俺はInstrumentsでいくぜ」でも使ってるけど、Chapter-5ではChapter-2のメモリーリークをInstrumentsを使って調査していくわけです。
 
 で、見つかった場所が
cell.textLabel.text = columnTitle;

 なんだけど、当然これtがChapter-6の呼び水になるわけですな。
 ドットってなんだよと。
 cellはUITableViewCell*なんだからオブジェクトのポインタのはずで、ドットなんかでtextLabelと結べるわけねーじゃんとC/C++経験者の疑問にChapter-6では

Objective-C 2.0 プログラミング言語

 を引用しながら答えを探していくわけです。で、このドット構文を調べていくと必然的にぶつかるのが@propertyでして、この2つの機能をChapter-4同様、実験用のクラスを定義してコンソールを駆使しつつ実践で確認していくわけです。

 まあ、これでサンプルソースを読む上で重要な知識、ドット構文、@propertyを得るわけですが、この確認作業でちょっとした事件がおきるわけです。

 というのもUILabelのtextの@propertyはcopyのはずなのに、Instrumentsではcopyではなくretainが呼ばれてる事がわかるんですわ。
 なぜだ?と
 これにはNSString、NSMutableStringの違い、そしてポリモーフィズムによるしかけが炸裂してるわけで、これをプログラムで試しながら検討していくわけです。

 そしてポリモーフィズムを使った、iOSで最も有名な機構がデリゲートデザインパターンというわけで、それは何だとChapter-7へとなだれ込んでいくわけです。
 続く。