かみやんの技術者ブログ

主にプログラムの話です

iOS4.0のまとめ

まずは目玉は、マルチタスクですね。バックグラウンドへ行って、サスペンドして、ユーザがタスク一覧から×ボタンで終了させたときは、applicationWillTerminate:デリゲートが呼ばれないというのが最大の注意点か。おかげで、このデリゲートで接続の安全な切断とか状態をストレージ保存をしているアプリは、applicationDidEnterBackground: デリゲートをハンドルして、そちらに処理を移す必要がある。特定の条件で、applicationWillTerminate:も呼ばれることがあるとのことなのでそちらにも終了処理が必要。
あとバックグラウンドは限定的と聞いてはいたが、はやり結構制限が厳しい。がしかし、こういうCPUパワーの小さいデバイスでは、制限を強くすることはよい設計だと思う。実際、iOS3.1.3では、Apple製メールアプリがバックグラウンドで受信を始めるとキーボードがガクガクになるし、スクロールももたつく。なので私はApple製メールは、フェッチOFFにして起動していない。サードパーティ製アプリが、がんがんバックグランドでCPUパワーを使うとガクつく可能性がある。多くのユーザにとって、アプリの起動が速ければよいので、通常のアプリはサスペンドされるというのはよいことだ。
逆にバックグランドをフルに使いたい開発者は、何がよいか?実際のところ公式文章を読んでも、実験してみないと詳細が分からないところが多々ある。一番時間が多くもらえるのは長時間タスクだ。実験していないが、公式文章の中に10分とあった。ただし、これはアプリがフォアグラウンドからバックグラウンドへ移った直後から10分が限界。Apple側の想定としては、ダウンロード開始ボタンをおして、ホームボタンを押して、他のアプリで遊んで、ダウンロード後に戻ってくるという使い方を想定しているのだろう。ダウンロードだけならCPUパワーはあまりいらないのでこれはよい。ただ圧縮ファイルを展開とか、ファイルをパースするとかそういう処理もバックグラウンドで処理が必要だと、CPUパワーを食うだろう。どうせならOS側で実時間でアプリに時間をくれるのではなく、CPU利用時間でくれればよいのにとか思ったり。
あとバッテリー消費が少なくてアプリが終了していても起こしてくれるシグニフィカント位置変更イベントは、ちょっとよさげ。だがこのイベントでもらえる時間は公式文章にみあたらなかったので実験が必要だ。ただし、シグニフィカント位置変更イベントは、携帯電話網の基地局間の電波強度による位置推定らしいので、ある程度大きくユーザが移動しないとイベントが発生しないようだ(何kmぐらい移動したらイベントが来るのかこれも実験が必要だ。WiFiポイントの移動でも来てくれるともっとよいが)。あと、携帯電話網がない、iPod touchや、iPad WiFi版でこの機能が使えるかも調べていない。
VoIPも実験しないといけない。10分に一度最大30秒の時間がもらえるようだ。あと接続先の相手のコンピュータからデータが来たらサスペンドから復帰もある。OSブート直後から起動してもらえる。等かなりVoIPは優遇されている。

あと、OS3.2からアプリケーション間でデータ交換ができるようになったのが大きい。Androidではインテントがあるが、あれに近い。このファイルフォーマット(MIMEタイプ)に興味がある人、手あげて〜。とアプリが問い合わせると、OSが一覧をくれる。みたいな機能。GoodReaderとかDropboxがすぐに対応するだろう。

ローカル通知もうれしい。プッシュ通知はサーバを立てる必要があり、売り切りアプリに向かない。バックグラウンド実行との相性もよいし。

Retinaディスプレイも早くみたい。

あと、まだまだ山ほど書きたいことがあるが、また今度。
参考:あと、OS3.2の機能も多くはOS4.0で取り込まれているので要チェック。 http://d.hatena.ne.jp/kamiyan2/20100606
この記事が参考になりましたら、ibisMail for iPhoneを是非ダウンロードください。