ザッカーバーグの面接試験:Objective-C のブロックを使いこなす
2012.08.07
Facebook もようやくモバイルの重要性を認識したらしく、スマートフォン・アプリの開発経験者を募集している。そこで、「私が Facebook の面接官だったら」という仮定のもとに試験問題を作ってみた。iOS 未経験者がいきなり解くのは無理だが、「iPhone アプリならば毎日のようにバリバリと書いています」と主張するエンジニアの実力のほどを計るのに程よい問題だ。
問題
iOSでは、HTTP 経由でデータをサーバーから取得する場合、NSURLConnection を使います。しかし、一つのコントローラーから複数の HTTP リクエストを同時に発行する必要がある場合、コントローラー自身を delegate にして複数の NSURLConnection で共有すると、プログラムの可読性がどうしても落ちてしまいます。そこで、可読性を増すために、ブロックを活用した HTTPLoader というヘルパークラスを作ることにしました。使い方はこんな感じです。
NSURLRequest* request = ...
[HTTPLoader loadAsync:request
complete:^(NSData* data, NSError *error) {
if (data) {
// Success: process the data
} else {
// Error: process the error
}
}];
そこで問題です。
HTTPLoader を実装してください(ただし、iOS 4.x 上でも動くように iOS 5.0 で追加された機能は使わないでください。また、紙の上ではなく、xCode を使って実際に動作確認しながら作って下さい) 。実装はできるだけシンプルに、ただし、並行して同時に複数の HTTP リクエストが処理できるように配慮して実装してください。また、このクラスを使う場合の注意点も記述してください。
(制限時間45分)
書いてみました。
45分で終わりませんでした。
http://bit.ly/P4WAs1
Posted by: Yomoapp | 2012.08.07 at 23:22
https://gist.github.com/3293117
書いてみました。
クラスを使う場合の注意点は、リクエストのキャンセルはできないことと、ARCを利用していること、です。
Posted by: 岸川克己 | 2012.08.08 at 01:01
書いてみました。
GCD禁止のほうがいいかもしれません
https://github.com/yanamura3/HTTPLoader
Posted by: Yanamura3 | 2012.08.11 at 03:40