マルチタスク対応といっても、バックグラウンドでなんでもかんでも実行できるわけではなく、ドキュメントにもあるとおり、バックグラウンドで処理を実行し続けることができるのは 音楽再生(audio)、位置情報取得(location)、VoIP この3種類だけです。
http://blog.mudaimemo.com/2011/01/ios.html
実行したいコードを UIApplication の
beginBackgroundTaskWithExpirationHandler?: endBackgroundTask?:
というメソッドでくるんであげるだけ
// UIBackgroundTaskIdentifier型の bgTask というプロパティが宣言されているとして - (void)upload { UIApplication *app = [UIApplication sharedApplication]; // ここから「アプリがバックグラウンドに入っても実行し続けたい処理」が始まると通知 bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ // このブロック内は一定時間内 (10分程度)に処理が完了しなかった場合に実行される。 [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; // アップロード処理を適当に書く // アップロード中にアプリがバックグラウンドに入ってもアップロードは継続 } // アップロード完了後に呼ばれるdelegateメソッド - (void)uploadFinished { // 「アプリがバックグラウンドに入っても実行し続けたい処理」が終わったと通知 [[UIApplication sharedApplication] endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }
http://d.akiroom.com/2012-01/ios-background-class-navigationcontroller/#more-255
http://cocoadays.blogspot.jp/2011/04/ios-task-completion.html
Task Completion は、iOS4 から導入されたマルチタスキングの機能の一つで、これを利用すると最大10分間を上限にバックグラウンドで処理を実行できる。
http://thinkit.co.jp/story/2011/01/14/1961?page=0,2
http://d.hatena.ne.jp/glass-_-onion/20110706/1309909082
http://growthfield.hatenablog.jp/entry/2012/01/29/060746
voipとして審査にとおるかどうかはべつとして、実機で常時接続する方法
http://growthfield.hatenablog.jp/entry/2012/01/30/060135 電波が途切れても再接続する方法
http://growthfield.hatenablog.jp/entry/2012/01/31/063748
http://growthfield.hatenablog.jp/entry/2012/02/28/082834
http://www.killerstartups.com/mobile/iphoneonrails-com-your-iphone-working-better/