今週の週刊 Life is Beautiful:8月7日号
市場原理と環境保護という二つの力が、米国を脱原発へと向かわせている

ザッカーバーグの面接試験:Objective-C のブロックを使いこなす

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分)

Comments

Yomoapp

書いてみました。
45分で終わりませんでした。

https://bit.ly/P4WAs1

岸川克己

https://gist.github.com/3293117

書いてみました。
クラスを使う場合の注意点は、リクエストのキャンセルはできないことと、ARCを利用していること、です。

Yanamura3

書いてみました。
GCD禁止のほうがいいかもしれません
https://github.com/yanamura3/HTTPLoader

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.)