iPadアプリ開発日誌:neu.Notes、仕事効率化カテゴリーで1位に
読者への公開質問:なぜソニーはアップルになれなかったのか?

iPadアプリ開発日誌:CloudReadersのアーキテクチャの解説を書きました

 インプレス・ジャパンの企画本「iPad電子書籍アプリ開発ガイドブック」に筆者の一人として参加したので、ここを借りて宣伝させていただく。

 編集担当の方から、「これから電子書籍アプリを作ろうという人向けにノウハウなどを公開して欲しい」とのリクエストに基づき、CloudReadersの開発経緯とアーキテクチャを解説してみた。

 ノウハウとは言っても、基本的には「ちゃんとMVCで作れ」「できるだけCPUじゃなくてGPUに仕事をさせる」「Interface Builderを最大限活用して、UIとロジックを分離しろ」などの話なんだが、実際のアプリを題材にそのアーキテクチャを語っているので、その手の「基礎」と「応用」のギャップをなかなか乗り越えられない人には良い教材だと思う。

 ちなみに、アーキテクチャの解説部分は、

 ユーザーが読みたいドキュメントを選択するとロードされるのが、ComicReaderViewControllerだ。これが「他のリーダーよりも、はるかにサクサク動く CloudReaders」の評判を支える知恵の固まりである。

 ComicReaderViewControllerの初期化は、initWithBook:メソッドの呼び出しで行われる。ユーザーがライブラリの中からドキュメントを1つ選択したことを感知したRootViewControllerは、ComicLibraryから選択されたドキュメントに相当するComicReaderBookオブジェクト(後述のModelクラスの1つ)を取り出し、それを新しく作ったComicReaderViewControllerオブジェクトのinitWithBook:メソッドに渡す。さらに、view stateからそのドキュメント向けのview stateを取り出して、restoreViewState: メソッドを介してComicReaderViewControllerに渡す。...

の様にソースコードを交えて書かれているので、iOS上での開発経験の全くない人には少し辛いかもしれない。iOS上でアプリを作りはじめてみたものの、Interface Builderがうまく使いこなせない・View/Controllerの切り分け方が分からない・アプリがなかなかサクサク動いてくれない、ぐらいの人にちょうど良いだろう。

Comments

新米プログラマー

C言語とVBしか知らない初心者で、iPhoneApp開発を勉強している25歳です。ひよっこですが、私は、iPhoneアプリの開発を通して、MVC(ViewController+InterfaceBuilder)やDelegateなど、Appleが明確に提示するアーキテクチャー、開発思想を学習できるのが、すごく楽しいです。また、提供されている英語のドキュメントを読む度に、いつも「すごい!すごい!」ってワクワクしてます。Objective-Cも最初は全く読めませんでしたが、次第に理解するにつれ、オブジェクト指向を学ぶにはとってもいい言語なんじゃないかと、初心者ながら感じてます!中島さんがおっしゃる通り、iPhoneApp開発はとっても魅力的です!

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment

Your Information

(Name is required. Email address will not be displayed with the comment.)