投稿者別アーカイブ(金内)
みなさんお元気ですか。今回は、Cocoa Touch や Objective-C からちょっと離れて、筆者がいる開発チームでやっているペアプログラミングの効果について紹介します。
1つの画面とキーボードで、2人がいっしょに開発作業を進めるペアプログラミングは、XP(エクストリーム・プログラミング)で提唱されているプラクティスの中でも有名で、程度の差こそあれ、比較的多くのプログラマが経験していると思います。
半年ほど前、筆者のいる開発チームでも、順番にドライバー(書く人)とナビゲーター(見てる人)を決めて、1日のうち最低1時間はペアで作業するということを始めてみました。それまでも、特に意識せずにペアでプログラミングすることはありましたが、チームの取り組みとして導入したのはその時が初めてでした。
Objective-C では、オブジェクトの生成に alloc と init などのイニシャライザを組み合わせて使うというのは、ちょっとでもかじったことがある方はご存じでしょう。
MyObject *obj = [[MyObject alloc] init];
今日はこの仕組みについてです。まず、この alloc-init について2つのポイントを挙げておきます。
- 呼出し側はイニシャライザの戻り値を使うことになっている
- イニシャライザはクラスのインスタンスメソッドとしてプログラマが追加/オーバーライドできる
Objective-C ではこのことが言語の基本として存在しているおかげで、オブジェクト生成の柔軟性がぐっと上がっています。イニシャライザはプログラマが実装するので、どのようなインスタンスを返すかは自由です。上記の例で言えば MyObject の init は、MyObject そのもののインスタンス以外を返しても良いということです。
iOS のアプリ開発における主役クラスの1つである UIViewController。中でも、実用系のアプリを作る際には UITableView を表示するための UITableViewController が活躍してくれます。Xcode の新規クラスのテンプレートにも含まれていますね。
UITableViewController は UIViewController のサブクラスで、UITableViewDataSource と UITableViewDelegate という、UITableView を扱うのに必要な2つのプロトコルに適合しています。UITableView を表示する画面なら、基本的に UITableViewController クラスだけで事足りてしまいます。
とても便利なクラスである反面、複雑な処理をしようとすると、どんどん肥大化してしまうという欠点もあります。原因の1つとして、UITableViewController が次の3つのクラス/プロトコルの役割を1クラスで担っている点が考えられます。
- UIViewController
- UITableViewDataSource
- UITableViewDelegate
アプリが小気味よく動くようにするために、メインスレッドでの重たい処理を避けて、適宜バックグラウンドスレッドに処理を回すことはよくあります。
このとき注意が必要なのは、バックグラウンドでの処理結果を画面に反映させる時の以下のお約束です。
UIKit のオブジェクトはメインスレッド以外からアクセスしてはいけない
Apple のドキュメントとしては Cocoa Fundamentals Guide に “All UIKit objects should be used on the main thread only” と書いてあります。この制限は UIKit 特有ではなく、Java の Swing などでも共通の設計です。GUI のパフォーマンスを良くするために、スレッドセーフをあえて捨てて単純化しているのです。
ではどうすれば良いのかと言うと、バックグラウンドスレッドからメインスレッドに処理を渡すために、NSObject にある次のメソッドを使います。
こんにちは。フェンリルで iPhone アプリ開発を担当している かねうち です。
フェンリルでは、何人ものエンジニアやデザイナーが、もっと便利で楽しいアプリを作り上げようと毎日いろいろな問題にぶつかりながら一歩ずつ前に進んでいます。
これまで、フェンリルブランドのアプリはもちろん、お客様との共同開発という形も合わせて何本ものアプリをリリースしてきました。その経験から得られたいろいろな教訓やノウハウを、アプリ開発に携わっている方々や、開発に興味を持っているみなさんと共有したい!という想いから、このブログが始まることになりました。
このブログの兄貴分である Elegant Apps では、ユーザーにとって価値ある、まさにエレガントなアプリを数多く紹介してきました。この Elegant Apps Developers ではちょっと視点を変えて、エンジニアやデザイナーが、Cocoa Touch や Objective-C のコツ、アプリ内で工夫した UI のポイント、さらにもっと広く一般のプログラミングや UI・デザインについての話題を綴っていきます。
では、今日はあいさつということでここまで。週明けからさっそく更新していきますので、よろしくお願いします!