2012年8月15日水曜日

OS X v10.8 からのメモリ管理

 Mac向けの開発言語として OS X v10.5 (Leopard) から Objective-C に代わって Objective-C 2.0 が導入されました.Objective-C 2.0 は Objective-C を大幅に拡張したものですが,その中の最大のものはガベージコレクタの導入でしょう.もはや retain/release は考えなくてよくなったのです.

その後登場した iOS (当時は iPhone OS)では Objective-C 2.0 が採用されましたがガベージコレクタは引き継がれませんでした.プログラマは手動で retain/release しなければならないのです.(リファレンスカウンタが使えるため C++ の new/delete よりははるかに安全ですが.)

OS X v10.8 (Mountain Lion) になり,この Objective-C 2.0 ガベージコレクタ機能は非推奨になりました.iOSとの整合性を考えると,iOSにガベージコレクタを搭載するか,OS X から再びガベージコレクタを取り除くかですが,アップルは後者を選択しました.(プログラマから見るとやや驚きですよね.)

そのかわり,Xcode 4.2 からコンパイル時に retain/release を自動的に挿入する機能が付きました.アップルはこの技術を Automatic Reference Count (ARC) と呼んでいます.

ガベージコレクタを前提にしたコードは変更の必要は(原則として)ありません.一方,Objective-C 1.0 時代のコードはおそらく NSAutoreleasePool を多用していると思いますが,この NSAutoreleasePool はサポートされなくなったため,書き直しが必要です.(おそらくいちばん簡単なコード移行方法は,retain/release を削除してしまうことです.)

2012年8月5日日曜日

OS X v10.8 からの新フレームワーク

Apple の資料によれば,Mountain Lion から八つのフレームワークが新たに加わったようです.iOS 5 には搭載されていたフレームワークがやっと OS X にもやってきました.


Accounts (Accounts.framework). シングルサインオン(single sign on)機能を提供します.シングルサインオンを使うことで,アプリケーション毎にログイン情報を表示する必要がなくなり,ユーザエクスペリエンスが向上します.アカウントの認証処理を管理することでアプリの開発が容易になります.

Audio Video Bridging (AudioVideoBridging.framework). このフレームワークはオーディオ・ビデオ・ブリッジ(AVB)をサポートします.AVB ネットワーク上のメディアストリームのサービスの質を高め,遅延や通信帯域の保証をします.

Event Kit (EventKit.framework). ユーザのカレンダイベントやリマインダ項目にアクセスするインタフェースを提供します.このフレームワークの API を使って,既存のイベントを取得したり,新たにユーザカレンダにイベントを加えられます.Event Kit API で作成されたイベントは他のデバイスの CalDAV や Exchange calendars に伝達されます.カレンダには配信のタイミングルールを設定できるアラームを含めることができます.
また,Event Kit API を使うことで,リマインダリストにアクセスしたり,新規リマインダを作成したり,アラームを加えたり,期間や開始日を指定したり,リマインダに完了マークを付けることができます.
Note. Calendar Store framework (CalendarStore.framework) は OS X v10.8 では非推奨になっていますので,Event Kit framework を使いましょう.

Game Kit (GameKit.framework). これは開発アプリを Game Center に参加させるための API を提供しています.API を使い,ゲームアプリ内でリーダボードを表示したり,ユーザにスコアの共有やマルチプレイヤのゲームを行う機会を与えます.

GL Kit (GLKit.framework). このフレームワークは,OpenGL アプリの開発を容易にするために,一般的な関数やクラスのライブラリを提供します.さらに,最適数値計算,テクスチャ読み込みの簡易化,シェーダ効果の実装を行う API を含んでいます.

Scene  Kit (SceneKit.framework). これは 3D シーンの読み込み,操作,描画を効果的に行うために使うことができる高度な Objective-C の API を提供します.Scene Kit を使って Digital Asset Exchange files (.dae files) を書き出したり,3D シーンで定義されたオブジェクトや光,カメラ,幾何的データにアクセスできます.

Social (Social.framework). Socail framework はユーザに代わって操作を実行するサポートされたソーシャルネットワーキングサービスにリクエストを送信する API を提供します.また,開発アプリ内で,ソーシャルネットワーキングアカウントを統合するための情報検索に利用できます.

Video Toolbox (VideoToolbox.framework). これは QuickTime Image Compression Manager を 64 bit で置き換えたものを含んでいます.Video Toolbox API はビデオの圧縮・非圧縮やCore Video ピクセルバッファにあるラスタイメージフォーマット間の変換のサービスを提供します.


各 framework には Programming Guide があり,詳細を知りたい場合はそちらを参考にしてください.