『基礎からのiOS SDK』を読み終わったので、全体を通しての感想と、その後の学習方針についてまとめておきたい。
この本は、私にとってはiPhoneアプリ開発を始めるための”1冊目”として絶妙な本だったが、誰にでもオススメできるわけではない。次のような点を理解しておく必要がある:
C言語とオブジェクト指向がある程度わかっている人向けである
これは前書きに書いてある通り。C言語やオブジェクト指向についての基礎的な説明は一切ないので、そうした知識がない人は先に他の本を読むべき。一方で、知識がある人にとってはさっさと本題に入ってくれるのでとてもありがたい。Objective-C特有の概念を説明する部分は分かりやすいので、他言語の経験があれば全く無理なく理解できると思う。
ソフトウェア開発というのがどういう行為か分かっている人向けである
XcodeやInterface Builderといったツールの使い方については、本文に沿った最低限の操作しか説明されていない。実際にプログラミングをしていく上では、例えばNSLogでコンソールに出力しながら段階的に実装していくとか、必要に応じてブレークポイントを入れてデバッグするとか、気になることがあったらリファレンスを引くとか、そういうお約束をいろいろ知っている必要があるわけだが、その辺りの説明は一切ない。これまた分かっている人にはありがたいが、「今プログラミングの勉強中です」という人にはたぶん辛いと思う。
この本だけで実用的なアプリを作るのは(残念ながら)まず無理
iPhoneアプリを作る上で最も重要なView Controllerについての説明が一切なく、必然的にTable View ControllerやNavigation View Controller等についての説明もないので、「よくある画面」を作る方法が全く分からない。また他の書籍にせよネットにせよ、中級者向け以上の情報は普通View Controllerの使用を前提としているので、そうしたコードを読むこともできない。よってさらに先に進むためには、何とかしてこのギャップを埋める必要がある。
この点、日本語の書籍では『iPhone アプリケーションプログラミング』が比較的詳しかった。『基礎からのiOS SDK』を読み終えた後の2冊目としてちょうど良い内容だと思う。ちょっと日本語がわかりにくいところがあるのが難点だが……。
その後は実際に手を動かしながら、Appleが提供している各種ガイドを読んでいくのを強くオススメする。初学者が「こうしたい」と思う程度のことはたいていやり方が載っている。実際のところ、ネット上にはこのガイドの内容すら踏まえていないような情報が散見されるので、注意が必要である。
- View Controller Programming Guide for iOS
- Table View Programming Guide for iOS
- The Objective-C Programming Language
総じて『基礎からのiOS SDK』は、他言語での開発経験が十分にある人に向けて、iOS SDKおよびObjective-Cの機能を幅広く、ショーケース的に紹介する本だと感じられた。
最後に7章までの範囲で気になった点をまとめておく。8章以降は今のところ興味がない題材なので、ここまで詳しく読むことはしない。
クラス宣言の中でデリゲート用のプロトコルを列挙すべきか
これは7章だけでなく、4章のUIWebViewDelegateのところからずっと気になっていたことなのだが、本書ではデリゲート/データソース用のプロトコルをクラス宣言の中で列挙しないことが多々ある。例えば7章のMemoクラスは全部で5つのデリゲート/データソース用プロトコル(UIPickerViewDelegate,UIPickerViewDataSource,UITextViewDelegate,UIActionSheetDelegate,UIAlertViewDelegate)を採用しているのだが、本文中ではこれらを.hファイルに書き加えることについて一切触れていないし、ダウンロードできるコードの中でも2つ(UIActionSheetDelegateとUITextViewDelegate)しか列挙していない。
実際には、特にプロトコルを列挙しなくとも問題なく動く場合は多い。そもそもformalなプロトコルがSDK中に用意されるようになったのは比較的最近ということだし、型宣言に対してプロトコル名での限定を行っていないケースもままある(UIAlertViewなど)。そしてたとえ限定が行われていても、コンパイル時にチェックが行われるだけなので、実行時には意味を持たず、例えばInterface Builderによる接続などは問題なく行える(4章のUIWebViewのケースなど)。
しかし個人的には、それでも明示的にプロトコルを列挙しておくべきだと考える。第一に、formalなプロトコルがSDKに用意された以上、やはり将来問題になる可能性があるからだ。コンパイル時のwarningで済むかもしれないが、実行時の問題として分かりにくいバグになるかもしれない。今のうちに対応しておくに越したことはない。第二に、こちらの方が今すぐ実感できる点だが、プロトコルを列挙しておけば、Xcodeのメソッド補完が使えるからだ。デリゲートメソッドは非常に長い名前が多いので、補完があると大いに助かる。ESCキーを押すなどして補完候補一覧を出せば、どんなメソッドがあるかざっと確認できるという利点もある。
p.298
図の説明でUIBarButtonItemとなっている箇所は、正確に言うと直接UIBarButtonItemを置いてあるわけではなくUIButton (light info) をToolbarに置いた結果UIBarButtonItemが自動的に作られた、という状態。
p.301
なぜかセレクションインジケータについての説明が重複して2回載っている。
p.318 fadeToの定義
ここでfadeToしか定義しないのは物足りない。fadeIn, fadeOut さらには toggleFade まで定義しておくべき場面だと思う。
- (void) fadeIn { [self fadeTo: 1.0f]; } - (void) fadeOut { [self fadeTo: 0.0f]; } - (void) toggleFade { if (self.alpha == 0.0f) { [self fadeIn]; } else { [self fadeOut]; } }
p.353
xibファイルのローカライズは、手順通りに行うだけでは最初うまく適用されなかった(いつも英語が表示されてしまう)。シミュレータ上で一度アプリケーションを削除した後、再度ビルドと実行をしたらうまくいった。


[...] 以前も書いたが、iOS初学者が入門書を終えた後で「知識」を増やすには、下手に本を読んだりWebを漁ったりするより、Appleが提供している公式のプログラミングガイドを読むのが一番いい。フレームワークの各コンポーネントにどんな機能があり、どんな使い方があるか、他のどんな文書より網羅的に知ることができる。 [...]