プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

iCloud、Storyboad、ARC

iPhone/iPad/iPod touchプログラミングバイブル8章
いま読んでいるのは1つ前の版なので、最新のiOS6版とは内容が異なる。
たとえばiOS6版ではiCloudについて5章で書かれているが、iOS5版では8章で解説されている。

また9章のアプリケーションの作成の章でも少し違いがある。
iOS6版ではブロック崩しを作る節で、iOS5版の方ではRPGを作るらしい。
読まずに積んでいる間に新しい版が出てしまったので、参考URLでは新しい版を載せている。

iCloud

アップルが提供するクラウドサービス。
データを自動的にアップロードし端末間で共有する。
アドレス帳、カレンダー、メールはネットワーク経由、それ以外はwifi限定で同期・バックアップ。
さらにアプリ側でドキュメントをクラウド上のストレージに自動保存することもできる。
シミュレータでは動かせず、実機でもiCloudの利用を許可したアプリIDを取得しEntitlementsに設定する必要がある。

ファイルとキーバリュー

iCloudに保存できるデータ形式には「ファイル」と「キーバリュー」がある。

ファイル

バイナリデータ。画像など
iCloudに保存しているファイルのURLやメタデータの一覧取得も可能。
たとえばペイントソフトなら絵をiCloudに保存して端末間で共有することができる。

キーバリュー

キー(文字列)にオブジェクト(データ)を関連付けて保存する。
アプリの設定情報の保存に利用。
たとえば雑誌アプリであれば読んでいるページ番号を保存することができる。
ただし転送データ量はキー4KB、1つのキーバリューのデータが64KB以内。

Entitlementsの設定

Storyboadの利用

複数のビューのユーザーインターフェース、およびビューの遷移をデザインするためのツール。

Automatic Reference Counting(ARC)

コンパイル時にリファレンスカウンタ操作(retain/release/autorelease/dealloc)を自動挿入する機能。
オブジェクトを参照するポインタがなくなった時、ちょうどretainCountが0になるようretain/releaseを挿入する。
ガベージコレクションと似ているが、動的に管理されるわけではないので、利用するにはメモリ管理の知識も必要。
コーディング上の制約もある。

ARCの制約

  • 自作コードではretain/release/autorelease/deallocを呼ばない。実装しない。
    他のリソースを管理するためにdeallocメソッドを実装することは可能。
  • C言語の構造体にオブジェクトのポインタを利用しない
    構造体の代わりにオブジェクトを使用。
  • オブジェクトとオブジェクト以外(idとvoidなど)をキャストしない
    オブジェクトとオブジェクト以外をキャストするには注釈付きのキャスト演算子を使う。
  • NSAutoreleasePoolオブジェクトは使わない。
    代わりに@autoreleasepoolキーワードを使う

プロパティ変数、インスタンス変数の参照の強さ

  • 「weak」や「strong」などの修飾子で弱い参照と強い参照のどちらかを設定。
  • 強い参照はnilを代入するまでオブジェクトを破棄しない
  • 弱い参照は必要に応じてオブジェクトが破棄される。破棄されると自動的にnilが代入される。
@property(weak,nonatomic)NSString *str;  //弱い参照
@property(strong,nonatomic)UIWindow *window;  //強い参照

強い参照により循環参照が発生しメモリリークになることがある。適切にweakを指定する。


9章はアクションゲームとRPGとTwitterアプリの解説。
明日でこの本も読み終わる。

参考

iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)

iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)