reactivecocoa tokyo lt
Post on 01-Jul-2015
975 Views
Preview:
DESCRIPTION
TRANSCRIPT
Bolts-iOSを”ちょっと”駆使した 非同期処理の例
ReactiveCocoa Tokyo @freee株式会社
RACの話はしないしする気もない。 いいね?
自己紹介• @huin
• blog.huin.me
• Work at : - VOYAGE GROUP- genesix, Inc.
• iOS歴3年くらい
What is Bolts ?
• Parse(Facebook?)製の非同期処理ライブラリ
• Promiseっぽい何か
(メソッド名などが違う程度)
• PromiseKitに比べると人気がない
// Objective-C
- (BFTask *) fetchAsync:(PFObject *)object {
BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource];
[object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (!error) {
[task setResult:object];
} else {
[task setError:error];
}
}];
return task.task;
}
// Objective-C
- (void) doSomething {
BFTask *task = [self fetchAsync:self.object];
[task continueWithBlock:^id(BFTask *task) {
if (task.error) {
// handle error
}else{
// do post fetch task…
}
return task;
}];
}
所感• 非同期処理の代表といえばネットワーク処理
• BFTaskオブジェクトを返すことでblocksを引き回さなくても良くなるのでコードが綺麗になる
• でもそれでいいんだろうか?
ポケットIRでの例
http://goo.gl/zYSYpI
下からフェードイン
上へフェードアウト
データの読み込み
不可避なネットワーク処理の間、 アニメーションを駆使することで
ユーザーの待機ストレスを減らしたい.
例) ローディングインジケータとか
1.処理のリスト
1.ロゴの出現アニメーション
2.ユーザー登録(if required)
3.お気に入りの取得
4.ロゴの非表示アニメーション
5.次の画面への遷移
a. 実行順序
a. 2→3は非同期処理を順番に実行
b. 1とタスクaは並列に処理する(タスクb)
c. タスクaとbの遅い方をタスクbの完了とする
d. タスクbが完了したら 4を開始する
e. 4が完了したら5を実行
// タスク(1) : ロゴの表示アニメーション BFTask *welcomeTask = [self showAnimationTask]; ! // タスク(2) : ユーザー登録 BFTask *userTask = [[self saveUserTask] continueWithBlock:^id(BFTask *task) { if (task.error) { return task; } // タスク(3) お気に入りの取得. タスク(2)の後に実行される. return [self fetchFavoriteTask]; }]; ! // タスク(b) : タスク(1)とタスク(a)の2つを並列に処理する BFTask *tasks = [BFTask taskForCompletionOfAllTasks:@[welcomeTask, userTask]]; ! [[tasks continueWithSuccessBlock:^id(BFTask *task) { ! // タスク(4) : ロゴの非表示アニメーション. タスク(b)完了後に実行される. return [self hideAnimationTask]; }] continueWithBlock:^id(BFTask *task) { if (task.error) { [UIAlertView alertWithError:task.error]; }else{ // タスク(5) : 次の画面への遷移 [self segueToNextView]; } return task; }];
• ネットワーク処理だけに限らず使いドコロはあるかも.
• もっとアニメーション凝っても良いかも(例 : アニメーション表示のプログレスバーをどうすれば体感速度がアップするのかが判明
| GIGAZINE http://goo.gl/6EaJQe)
• ご利用は計画的に
(非同期処理すべてでBolts使うべき?)
• ※ Bolts-iOSである必要はないので好きなライブラリで書けばいいよ!!
http://voyagegroup.com/crew/recruit/career/sdk/
iOSエンジニア募集中!
top related