|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
プログラムをCocoaプログラムたらしめているものは何でしょうか?Cocoa開発ではさまざまな言語を使用できるので、言語ではありません。Cocoaアプリケーションは(複雑で時間のかかる作業にはなりますが)コマンドラインから作成できるので、開発ツールでもありません。すべてのCocoaプログラムに共通している(それらを特徴付けている)ことは、Cocoaプログラムが最終的にはルートクラスであるNSObjectを継承するオブジェクトで構成されていることと、最終的にObjective-Cランタイムがベースになることです。すべてのCocoaフレームワークについても同じことが言えます。
注: この説明には、いくつか補足も必要です。第1に、CocoaはNSProxyというもう1つのルートクラスを提供します。ただしNSProxyはCocoaプログラミングではめったに使用されません。第2に、デベロッパ独自のルートクラスを作成することもできます。しかし、それは大変な作業になり(Objective-Cランタイムとやり取りするコードを記述する必要があります)、おそらく時間をかけるだけの価値はないでしょう。
Mac OS XにはいくつかのCocoaフレームワークが含まれており、アップルとサードパーティベンダが絶えずフレームワークをリリースしています。このように多数のCocoaフレームワークがある中で、突出しているのがFoundationとApplication Kitの2つであり、これらがコアCocoaフレームワークです。Application Kitにリンクし、そのクラスを使用しない限り、Cocoaアプリケーションを開発することはできません。また、Foundationフレームワークにリンクして、そのクラスを使用しない限り、Cocoaソフトウェアを開発することはできません(Cocoaのアンブレラフレームワークにリンクすると、これらのフレームワークへ自動的にリンクします)。FoundationおよびApplication KitフレームワークはCocoa開発に必須で、それ以外はすべて二次的なものであり、必須ではありません。
次のセクションでは、コアとなる2つのCocoaフレームワークの機能とクラスを詳しく見ていき、さらに二次的なフレームワークについても簡単に説明します。これらの大きなフレームワークに馴染みやすくなるように、FoundationとApplication Kitフレームワークの説明では、各階層にある多数のクラスを機能グループに分類します。これらのグループ分けには確固たる論理的基準がありますが、ほかの方法でクラスをうまくグループ分けすることもできます。
Foundation
Application Kit
その他のフレームワークとCocoa API
Foundationフレームワークは、すべての種類のCocoaプログラムに使用できるクラスの基本レイヤを定義しています。FoundationのクラスをApplication Kitのクラスから区別する基準はユーザインターフェイスです。オブジェクトがユーザインターフェイスに表示されない場合や、ユーザインターフェイスのサポート専用に使用されない場合、そのクラスはFoundationに属します。Foundation以外のフレームワークを使用しないCocoaプログラムを作成できます。たとえば、コマンドラインツールやインターネットサーバなどです。
Foundationフレームワークは、次のようにいくつかの目標を考慮して設計されました。
特にバンドル技術とUnicode文字列によって、国際化とローカリゼーションをサポートする。
オブジェクトの永続性をサポートする。
オブジェクトの分散をサポートする。
移植性をサポートするために、オペレーティングシステムに依存しない手段を提供する。
プログラムプリミティブ(数値、文字列、コレクションなど)を対象とするオブジェクトラッパ、またはこれに相当するものを提供する。また、基盤のシステムエンティティとサービス(ポート、スレッド、ファイルシステムなど)にアクセスするためのユーティリティクラスを盛り込む。
Cocoaアプリケーションは、定義上はApplication Kitにリンクし、必ずFoundationフレームワークにもリンクしなければなりません。クラス階層は、NSObjectという同じルートクラスを共有します。Application Kitのメソッドと関数は、大部分ではないにしても、その多くが、パラメータまたは戻り値としてFoundationオブジェクトを使用します。いくつかのFoundationクラスはアプリケーション向けに設計されているように見えるかもしれませんが(たとえば、NSUndoManagerやNSUserDefaults)、これらはユーザインターフェイスに関連のない用途も考えられるため、Foundationに含まれています。
一定の状況下で、プログラムのオブジェクト間での一貫した動作と予測を確実なものとするために、Foundationでは、Cocoaプログラミングに対して次のようにいくつかのパラダイムとポリシーを導入しています。
オブジェクトの所有権とオブジェクトの破棄。Foundationでは、自動ガーベジコレクションのメカニズムの代わりに、オブジェクトの所有権のポリシーを設定し、オブジェクトは、それが作成したり、コピーしたり、または明示的に保持していたオブジェクトを解放する責任があるということを定めています。NSObject(クラスおよびプロトコル)は、オブジェクトの保持と解放のメソッドを定義しています。(NSAutoreleasePoolクラスとして定義されている)自動解放プールは、遅延解放のメカニズムを実装しており、これによりCocoaプログラムは、呼び出し側が責任を負っていないオブジェクトを返すための一貫性のある決まりを保てるようになっています。オブジェクトの所有権と破棄に関する問題の詳細については、『Memory Management Programming Guide for Cocoa』を参照してください。
可変クラス。Foundationの多くの値クラスやコンテナクラスには不変クラスと同等の可変クラスがあり、可変クラスは必ず不変クラスのサブクラスになります。オブジェクトなどのカプセル化された値やメンバーシップを動的に変更する必要がある場合は、可変クラスのインスタンスを作成します。これは不変クラスを継承するため、不変タイプを受け取るメソッドに可変インスタンスを渡すことができます。オブジェクトの可変性の詳細については、“「オブジェクトの可変性」”を参照してください。
クラスクラスタ。クラスクラスタは、1つの抽象クラスと、その抽象クラスがアンブレラインターフェイスとして機能する一連のプライベートな具象サブクラスです。コンテキスト(特に、オブジェクトの作成に使用するメソッド)に応じて、適切な最適化されたクラスのインスタンスが戻されます。たとえば、NSStringとNSMutableStringは、さまざまな格納の要件に合わせて最適化された各種のプライベートサブクラスのインスタンスのために、ブローカーとして機能します。長年にわたって、具象クラスのセットはアプリケーションを壊すことなく、何度か変更されました。クラスクラスタの詳細については、“「クラスクラスタ」”を参照してください。
通知。通知はCocoaの主要なデザインパターンです。ブロードキャストのメカニズムに基づいており、ほかのオブジェクトが実行していることや、ユーザイベントやシステムイベントの形で遭遇していることを、オブジェクト(オブザーバという)に通知し続けることができます。通知を発行するオブジェクトは、通知を受けるオブザーバの存在や身元について認識していなくても構いません。通知には、同期、非同期、分散のタイプがあります。Foundationの通知のメカニズムは、NSNotification、NSNotificationCenter、NSNotificationQueue、NSDistributedNotificationCenterの各クラスによって実装されています。通知の詳細については、“「通知」”を参照してください。
Foundationクラス階層は、(NSObjectおよびNSCopyingプロトコルとともに)基本的なオブジェクトの属性と動作を定義している、NSObjectクラスをルートに持ちます。NSObjectと基本的なオブジェクトの動作の詳細については、“「ルートクラス」”を参照してください。
Foundationフレームワークの残りは、いくつかの関連のあるクラスのグループと、若干の個別クラスで構成されます。文字列やバイト配列などの基本的なデータ型を表すクラス、ほかのオブジェクトを格納するためのコレクションクラス、日付などのシステム情報を表すクラス、ポート、スレッド、プロセスなどのシステムエンティティを表すクラスがあります。Figure 1-6、Figure 1-7、Figure 1-8のクラス階層チャートは、これらのクラスが形成する論理グループとそれらの継承関係を示します。
上の図は、Foundationフレームワークのクラスを、次のカテゴリで(ここに記したその他の関連性とともに)論理的にグループ化しています。
値オブジェクト。値オブジェクトはさまざまな種類のデータをカプセル化し、そのデータへのアクセスと、データに対する各種の操作を可能にします。これらはオブジェクトであるため、オブジェクト(およびこれに含まれる値)をアーカイブして分散できます。NSDataはバイトストリームのためのオブジェクト指向ストレージを提供しますが、NSValueとNSNumberは単純なスカラー値の配列のためのオブジェクト指向ストレージを提供します。NSDate、NSCalendarDate、NSTimeZone、NSCalendar、NSDateComponents、NSLocaleの各クラスは、時刻、日付、カレンダー、ロケールを表すオブジェクトを提供します。これらは日付と時刻の差を計算するメソッド、日付と時刻をさまざまな形式で表示するメソッド、および世界中の位置を基準に日付と時刻を調整するメソッドを提供します。
文字列。NSStringはもう1つの種類の値オブジェクトで、特定のエンコーディングでのヌルで終了するバイト配列のためのオブジェクト指向ストレージを提供します。UTF-16、UTF-8、MacRoman、その他多数のエンコーディングの間で文字列のエンコーディングを変換するためのサポートが含まれています。NSStringはまた、文字列の検索、結合、比較のメソッドと、ファイルシステムパスの操作のメソッドも提供します。NSScannerオブジェクトを使うと、NSStringオブジェクトの数字と単語を解析できます。(上の図にコレクションクラスとして示されている)NSCharacterSetは、NSStringおよびNSScannerのさまざまなメソッドによって使われる文字セットを表しています。
コレクション。コレクションは、ほかのオブジェクト(通常は値オブジェクト)を特定の順序付けスキームで格納し、供給するオブジェクトです。NSArrayはゼロから始まるインデックスを使用し、NSDictionaryはキーと値のペアを使用し、NSSetは順序のないオブジェクトストレージを提供します(NSCountedSetはコレクション内の重複を排除します)。NSEnumeratorオブジェクトを使って、コレクションの要素に順序どおりにアクセスできます。コレクションオブジェクトは、プロパティリストの必須コンポーネントで、すべてのオブジェクトと同様にアーカイブして分散できます。
オペレーティングシステムサービス。多くのFoundationクラスにより、オペレーティングシステムのさまざまな低レベルサービスにアクセスし、同時にオペレーティングシステム固有の性質による影響を排除できます。たとえば、NSProcessInfoによって、アプリケーションが動作する環境を問い合わせることができ、NSHostによって、ネットワーク上のホストシステムの名前とアドレスが得られます。NSTimerオブジェクトによって、ほかのオブジェクトに一定の間隔でメッセージを送信でき、NSRunLoopではアプリケーションや他の種類のプログラムの入力ソースを管理できます。NSUserDefaultsは、グローバルな(ホスト単位の)デフォルト値とユーザ単位のデフォルト値(環境設定)からなるシステムデータベースとのプログラムインターフェイスを提供します。
ファイルシステムとURL。NSFileManagerはファイルの作成、名前の変更、削除、移動といったファイル操作のための、一貫性のあるインターフェイスを提供します。NSFileHandleは低レベルのファイル操作(ファイル内でのシークなど)を可能にします。NSBundleはバンドルに格納されているリソースを見つけて、その一部(nibファイルやコードなど)を動的にロードできます。NSURLとNSURLHandleを使うと、データのURLソースの表示、アクセス、管理を行うことができます。
プロセス間通信。このカテゴリのクラスのほとんどは、さまざまな種類のシステムポート、ソケット、ネームサーバを表し、低レベルのIPCを実装するのに役立ちます。NSPipeはBSDパイプ、すなわちプロセス間の単方向通信チャンネルを表します。
スレッド化とサブタスク。NSThreadにより、マルチスレッドのプログラムを作成できる一方、さまざまなロッククラスによって、競合するスレッドのプロセスリソースへのアクセスを制御するメカニズムが提供されます。NSTaskでは、作業を実行する子プロセスを生成し、その進捗状況を監視できます。
通知。通知クラスの概要については、“「Foundation のパラダイムとポリシー」”を参照してください。
アーカイブとシリアル化。このカテゴリのクラスは、オブジェクトの分散と永続化を実現します。NSCoderとそのサブクラスは、NSCodingプロトコルとともに、クラス情報をデータと一緒に保存できるようにすることで、アーキテクチャに依存しない方法でオブジェクトに含まれているデータを表します。
式と述語。述語クラス、すなわちNSPredicate、NSCompoundPredicate、NSComparisonPredicateは、フェッチオブジェクトまたはフィルタオブジェクトに制約を付けるための論理条件をカプセル化します。NSExpressionオブジェクトは、述語内の式を表します。
Spotlightクエリ。NSMetadataItemクラス、NSMetadataQueryクラス、および関連するクエリクラスは、ファイルシステムのメタデータをカプセル化して、そのメタデータに対するクエリを可能にします。
Objective-C言語サービス。NSExceptionとNSAssertionHandlerは、コード内でのアサーションの生成と、例外処理を行うための、オブジェクト指向の方法を提供します。NSInvocationオブジェクトは、プログラムで保存し、後で他のオブジェクトのメッセージを呼び出すために使用できるObjective-Cメッセージの静的表現です。これは、Undoマネージャ(NSUndoManager)および分散オブジェクトシステムによって使われます。NSMethodSignatureオブジェクトはメソッドの型情報を記録し、メッセージの転送の際に使われます。NSClassDescriptionは、クラスの関係とプロパティを定義したり、問い合わせたりするときに使われる抽象クラスです。
スクリプティング。このカテゴリのクラスは、プログラムがAppleScriptスクリプトとAppleイベントコマンドに応答するのを支援します。
分散オブジェクト。分散オブジェクトクラスは、同じコンピュータ上またはネットワーク上の異なるコンピュータ上のプロセスの間の通信に使用します。これらのクラスのうち、NSDistantObjectとNSProtocolCheckerの2つは、Cocoaのほかのルートクラスとは異なるルートクラス(NSProxy)を持っています。
ネットワーク。NSNetServiceおよびNSNetServiceBrowserクラスは、Bonjourと呼ばれるゼロコンフィギュレーションネットワークアーキテクチャをサポートしています。Bonjourは、IPネットワーク上にサービスを公開し、ブラウズするためのパワフルなシステムです。
Application Kitは、グラフィカルなイベント駆動型のユーザインターフェイス(ウインドウ、ダイアログ、ボタン、メニュー、スクローラ、テキストフィールドなど)を実装するのに必要なオブジェクトをすべて含んでいるフレームワークです。Application Kitは、画面上に効率よく描画したり、ハードウェアデバイスやスクリーンバッファと通信したり、描画の前に画面の領域をクリアしたり、ビューをクリップするために、あらゆる細部を処理します。Application Kitのクラスの数に、初めは圧倒されるかもしれません。しかし、Application Kitクラスのほとんどは、間接的に使用するサポートクラスです。また、Application Kitを使用するレベルも選択できます。
Interface Builderを使用してユーザインターフェイスオブジェクトからアプリケーションのコントローラオブジェクトへの接続を作成する。コントローラオブジェクトは、ユーザインターフェイスを管理し、ユーザインターフェイスと内部のデータ構造の間のデータの流れを調整します。このために、(Cocoaバインディング用の)既製のコントローラオブジェクトをそのまま使用できることもあれば、カスタムコントローラクラス、特にこれらのクラスのアクションメソッドとデリゲートメソッドを1以上作成する必要が生じることもあります。たとえば、ユーザがメニュー項目を選択したときに呼び出されるメソッドを実装する必要があります(ただし、適当なデフォルト実装がある場合は除きます)。
ユーザインターフェイスをプログラムで制御する。この場合はApplication Kitクラスとプロトコルにより精通している必要があります。たとえば、ユーザがウインドウ間でアイコンをドラッグできるようにするには、ある程度のプログラミングが要求され、NSDragging...プロトコルに精通している必要があります。
NSViewまたは他のクラスをサブクラス化することで、独自のオブジェクトを実装する。NSViewをサブクラス化するときには、グラフィック関数を使って独自の描画メソッドを記述します。サブクラス化には、Application Kitの仕組みに関する深い理解が必要になります。
Application Kitは、125以上のクラスとプロトコルで構成されています。どのクラスも最終的には、FoundationフレームワークのNSObjectクラスを継承します。Figure 1-9とFigure 1-10の図は、Application Kitクラスの継承関係を示します。
見て分かるとおり、Application Kitの階層ツリーは多岐にわたっていますが、かなり浅くなっています。この階層で最も深いクラスでも、ルートクラスからスーパークラスがわずか5階層離れているだけで、ほとんどのクラスはもっと近いところにあります。この階層ツリーの主要なブランチのいくつかは、特に興味深いものです。
Application Kitの最大のブランチのルートには、NSResponderクラスがあります。このクラスはレスポンダチェーン、すなわちユーザイベントに応答する一連の順序付けされたオブジェクトを定義します。ユーザがマウスボタンをクリックしたときや、キーを押したときにイベントが生成され、それに応答できるオブジェクトを求めてレスポンダチェーンに渡されます。イベントを処理するオブジェクトは、NSResponderクラスを継承している必要があります。コアとなるApplication Kitクラス、すなわちNSApplicationクラス、NSWindowクラス、およびNSViewクラスはNSResponderを継承しています。これらのレスポンダの詳細については、“「コアアプリケーションアーキテクチャ」”を参照してください。
Application Kitで2番目に大きなクラスブランチはNSCellを起点とするブランチです。このクラスのグループについて注目すべき点は、それらがNSView、さらにNSControlを継承するクラスとほぼ同等のクラスがあることです。ユーザのアクションに応答するユーザインターフェイスオブジェクトについては、Application Kitは作業をコントロールオブジェクトとセルオブジェクトに分担するようなアーキテクチャを使用しています。NSControlとNSCellクラス、およびそのサブクラスは、ボタン、スライダ、ブラウザなど、ユーザがアプリケーションの何らかの機能を画面上で操作して制御できるユーザインターフェイスオブジェクトの共通セットを定義しています。ほとんどのコントロールオブジェクトは、描画とイベント処理の細部を実装する1つ以上のセルオブジェクトに結び付いています。たとえば、ボタンはNSButtonオブジェクトとNSButtonCellオブジェクトで構成されています。詳細については、“「コントロールおよびセルのアーキテクチャ」”を参照してください。
コントロールとセルは、Application Kitの重要なデザインパターンであるターゲット/アクションメカニズムを実装しています。1つのセルには、ユーザがセルをクリック(またはほかの操作を実行)したときに特定のオブジェクトに送信するメッセージを識別する情報を保持できます。ユーザがコントロールを操作すると(たとえば、その上でマウスポインタをクリックするなど)、コントロールはそのセルから必要な情報を抽出し、ターゲットオブジェクトにアクションメッセージを送信します。ターゲット/アクションにより、ターゲットオブジェクトや呼び出されるべきメソッドを指定することで、ユーザアクションに意味を持たせることができます。一般に、Interface Builderを使ってこのようなターゲットとアクションを設定するには、コントロールオブジェクトからアプリケーションやほかのオブジェクトにControlキーを押しながらドラッグします。また、プログラムでターゲットとアクションを設定することもできます。
Application Kitのもう1つの重要なデザインパターンはデリゲートです。テキストフィールドやテーブルビューなど、ユーザインターフェイスの多くのオブジェクトはデリゲートを定義しています。デリゲートは、デリゲート元のオブジェクトに代わって、またはそれと連携して機能するオブジェクトです。このため、アプリケーション固有のロジックをユーザインターフェイスの操作に伝えることができます。デリゲート、ターゲット/アクション、Application Kitのその他のパラダイムとメカニズムの詳細については、“「オブジェクトとの通信」”を参照してください。これらのパラダイムとメカニズムがベースとしているデザインパターンの詳細については、“「Cocoaのデザインパターン」”を参照してください。
次のセクションでは、Application Kitの機能とアーキテクチャ面、およびそのクラスとプロトコルについて簡単に説明します。Figure 1-9およびFigure 1-10に示したクラス階層の図に従ってクラスをグループ分けします。
ユーザインターフェイス全般の機能について、Application Kitは次のクラスを用意しています。
グローバルアプリケーションオブジェクト。どのアプリケーションも、NSApplicationのシングルトンインスタンスを使用して、メインのイベントループの制御、アプリケーションのウインドウやメニューの追跡、適切なオブジェクト(すなわちオブジェクト自身、またはそのウインドウの1つ)へのイベントの配布、トップレベルの自動解放プールのセットアップ、アプリケーションレベルのイベントの通知の受信を行います。NSApplicationオブジェクトは、アプリケーションの起動、終了、非表示、アクティブ化、選択されたファイルがユーザによって開かれたなどの通知先に、デリゲート(デベロッパが割り当てるオブジェクト)を使用します。NSApplicationオブジェクトのデリゲートを設定し、デリゲートメソッドを実装することで、NSApplicationをサブクラス化せずにアプリケーションの動作をカスタマイズできます。“「コアアプリケーションアーキテクチャ」”でこのシングルトンアプリケーションオブジェクトについて詳しく説明します。
ウインドウとビュー。ウインドウおよびビュークラスであるNSWindowとNSViewも、NSResponderを継承し、ユーザのアクションに応答するよう設計されています。NSApplicationオブジェクトは、一連のNSWindowオブジェクトを保持し(アプリケーションに属するウインドウごとに1つずつ)、それぞれのNSWindowオブジェクトがNSViewオブジェクトの階層を保持しています。ビュー階層は、ウインドウ内での描画とイベント処理に使われます。NSWindowオブジェクトはウインドウレベルのイベントを処理し、他のイベントはそのビューに配布し、ビューのために描画領域を提供します。NSWindowオブジェクトもデリゲートを使用するため、動作のカスタマイズができます。
NSViewは、ウインドウに表示されるすべてのオブジェクトの抽象クラスです。すべてのサブクラスが、グラフィックス関数を使用して描画メソッドを実装します。drawRect:は、新しいNSViewを作成するときにオーバーライドする主要なメソッドです。
“「コアアプリケーションアーキテクチャ」”で、NSViewオブジェクトとNSWindowオブジェクトについて説明しています。
Cocoaバインディング用のコントローラクラス。抽象クラスであるNSControllerクラスと、その具象サブクラスであるNSObjectController、NSArrayController、NSTreeControllerは、Cocoaバインディングの実装部分です。この技術により、オブジェクトに格納されているアプリケーションデータと、ユーザインターフェイスにおけるそのデータの表現が自動的に同期します。これらのタイプのコントローラオブジェクトの説明については、“「Model-View-Controllerデザインパターン」”を参照してください。
パネル(ダイアログ)。NSPanelクラスはNSWindowのサブクラスで、一時的な情報、グローバルな情報、または緊急の情報を表示するために使用します。たとえば、エラーメッセージを表示する場合や、例外的または異常な状況への対応をユーザに問い合わせる場合は、NSWindowのインスタンスではなく、NSPanelのインスタンスを使うことになります。Application Kitは、ドキュメントの保存、開く、印刷に使用する「保存」、「開く」、「プリント」ダイアログなど、一般的なダイアログをいくつか実装しています。これらのダイアログを使用することで、異なるアプリケーションを通じて、共通の操作には一貫したルック&フィールをユーザに提供できます。
メニューとカーソル。NSMenu、NSMenuItem、NSCursorクラスは、アプリケーションがユーザに表示するメニューとカーソルの外観や動作を定義しています。
グループとスクロールビュー。NSBox、NSScrollView、NSSplitViewクラスは、ウインドウの他のビューオブジェクトやビューのコレクションにグラフィックの「アクセサリ」を提供します。NSBoxクラスによって、ウインドウの要素をグループ化して、グループ全体の周囲に境界線を描くことができます。NSSplitViewクラスでは、垂直または水平方向にビューを付加して各ビューに一定の共通領域を割り当てたり、スライディングコントロールバーでビューの領域を分配し直したりできます。NSScrollViewクラスとそのヘルパークラスのNSClipViewは、スクロールのメカニズムのほかにグラフィックオブジェクトも提供しており、ユーザはこれを使ってスクロールを開始し、制御できます。NSRulerViewクラスでは、スクロールビューにルーラとマーカを追加できます。
テーブルビューとアウトラインビュー。NSTableViewクラスは、データを行列形式で表示します。NSTableViewは、データベースレコードの表示に適しています(ただしこれに限られているわけではありません)。その場合は行が各レコードに対応し、列にはレコードの属性が含まれます。ユーザは個々のセルの編集と、列の並べ替えができます。NSTableViewオブジェクトに対してデリゲートオブジェクトとデータソースオブジェクトを設定することで、その動作と内容を制御できます。アウトラインビュー(NSOutlineViewのサブクラスであるNSTableViewのインスタンス)は、テーブル形式のデータを表示するもう1つの方法を提供します。NSBrowserクラスでは、ユーザがオブジェクトを作成し、それを使って階層データを表示したり操作したりできます。
NSTextFieldクラスはシンプルな編集可能テキスト入力フィールドを実装し、NSTextViewクラスはより大きなテキスト本文に対する包括的な編集機能を提供します。
NSTextViewはNSText抽象クラスのサブクラスで、拡張されたテキストシステムとのインターフェイスを定義します。NSTextViewは、リッチテキスト、添付(グラフィックやファイルなど)、入力管理とキーの割り当て、マーク付きテキストの属性をサポートしています。NSTextViewは、フォントウインドウとフォントメニュー、ルーラと段落スタイル、サービス機能、ペーストボード(クリップボード)と連携します。また、NSTextViewは委任と通知によるカスタマイズが可能であるため、NSTextViewをサブクラス化する必要はめったにありません。NSTextField、NSForm、NSScrollViewなど、Interface Builderのパレット上にあるオブジェクトにはすでにNSTextViewオブジェクトが含まれているため、NSTextViewのインスタンスをプログラムで作成することもめったにありません。
NSTextStorage、NSLayoutManager、NSTextContainer、および関連クラスを使用すると、さらにパワフルでクリエイティブなテキスト操作(円の中にテキストを表示するなど)もできます。Cocoaのテキストシステムは、リスト、テーブル、非連続選択もサポートしています。
NSFontクラスとNSFontManagerクラスは、フォントファミリ、サイズ、バリエーションをカプセル化して管理します。NSFontクラスは、フォントごとに1つのオブジェクトを定義しています。効率のために、これらのオブジェクトは大量のデータを表すことができ、アプリケーションのすべてのオブジェクトで共有されます。NSFontPanelクラスは、ユーザに表示するフォントウインドウを定義しています。
NSImageクラスとNSImageRepクラスはグラフィックスデータをカプセル化し、ディスク上のファイルに保存されたイメージや画面に表示されたイメージに簡単かつ効率的にアクセスできるようにします。NSImageRepサブクラスは、それぞれが、特定の種類のソースデータからイメージを描画する方法を認識しています。NSImageクラスは、1つのイメージの複数の表現を提供するほか、キャッシングなどの動作も提供します。Cocoaのイメージングと描画の機能は、Core Imageフレームワークに統合されています。
カラーは、NSColor、NSColorSpace、NSColorPanel、NSColorList、NSColorPicker、NSColorWellの各クラスによってサポートされています。NSColorとNSColorSpaceは、カスタムのものも含め、豊富なカラー形式と表現をサポートしています。他のクラスはほとんどインターフェイスクラスです。これらのクラスは、ユーザがカラーを選択して適用できるパネルとビューを定義し、提供します。たとえば、ユーザはカラーウインドウのカラーを任意のカラーウェルにドラッグできます。NSColorPickingプロトコルでは、標準のカラーウインドウを拡張できます。
NSGraphicsContext、NSBezierPath、NSAffineTransformクラスはベクトル描画を支援し、拡大縮小、回転、変換などの図形の変形をサポートします。
NSPrinter、NSPrintPanel、NSPageLayout、NSPrintInfoの各クラスは、連携して機能し、アプリケーションのウインドウとビューに表示される情報の、プリントやファックス送信を行う手段を提供します。NSViewのPDF表現を作成することもできます。
NSFileWrapperクラスは、ディスク上のファイルやディレクトリに対応するオブジェクトを作成するのに使用します。NSFileWrapperは、ファイルの内容を表示、変更、または別のアプリケーションへ送信できるように、その内容をメモリ内に保持します。また、ファイルをドラッグしたり、添付ファイルとして表示したりするためのアイコンも用意されています。FoundationフレームワークのNSFileManagerクラスは、ファイルやディレクトリの内容にアクセスして列挙するのに使用します。NSOpenPanelクラスおよびNSSavePanelクラスも、ファイルシステムに対する使いやすく馴染みやすいユーザインターフェイスを提供します。
NSDocumentController、NSDocument、およびNSWindowControllerの各クラスは、ドキュメントベースのアプリケーションを作成するためのアーキテクチャを定義しています(NSWindowControllerクラスは、クラス階層図のユーザインターフェイスグループのクラスに表示されています)。このようなアプリケーションは、完全に同じように含まれているけれどもそれぞれが独自に組み立てられたデータを生成し、ファイルに保存できます。アプリケーションは、これらのドキュメントに対して保存、開く、元に戻す、閉じる、管理の操作を行うための組み込み機能や簡単に取得できる機能を備えています。
アプリケーションを世界の複数の地域で使用する場合は、そのリソースを言語、国、または文化圏に合わせてカスタマイズしたり、ローカライズする必要がある場合もあります。たとえば、アプリケーションが日本語、英語、フランス語、およびドイツ語版の文字列、アイコン、nibファイル、またはコンテキストヘルプを持たなければならない場合もあります。特定の言語に固有のリソースファイルは、バンドルディレクトリのサブディレクトリ(.lproj拡張子の付いたディレクトリ)にまとめられています。通常は、Interface Builderを使ってローカリゼーションリソースファイルをセットアップします。Cocoaの国際化機能の詳細については、“「nibファイルその他のアプリケーションリソース」”を参照してください。
NSInputServerクラスおよびNSInputManagerクラスはNSTextInputプロトコルと連携して、アプリケーションからテキスト入力管理システムにアクセスできるようにします。このシステムは、さまざまな国際キーボードが生成するキーストロークを解釈し、テキストビューオブジェクトに適切なテキスト文字やControlキーイベントを送ります(一般的にはこれらのクラスはテキストクラスが処理するため、何もする必要はありません)。
次のApplication Kitクラスは、アプリケーションにオペレーティングシステムサポートを提供します。
他のアプリケーションとのデータ共有。NSPasteboardクラスはペーストボード、すなわちアプリケーションからコピーされるデータのリポジトリを定義し、そのデータをどのアプリケーションでも利用できるようにします。NSPasteboardは、よく知られているカット&ペースト操作を実装します。NSServicesRequestプロトコルはペーストボードを使用して、登録されたサービスによってアプリケーション間で渡されるデータをやり取りします(ペーストボードは、ユーザインターフェイスにクリップボードとして実装されます)。
ドラッグ。ごくわずかなプログラミングによって、カスタムビューオブジェクトはどこにでもドラッグ&ドロップできます。NSDragging...プロトコルに従うことにより、オブジェクトはこのドラッグメカニズムの一部になります。ドラッグ可能オブジェクトはNSDraggingSourceプロトコルに従い、ドラッグ先オブジェクト(ドロップの受け入れ側)はNSDraggingDestinationプロトコルに従います。Application Kitは、カーソルの追跡と、ドラッグされたイメージの表示に関する詳細をすべて隠します。
スペルチェック。NSSpellServerクラスにより、スペルチェックサービスを定義し、他のアプリケーションにサービスとして提供できます。アプリケーションをスペルチェックサービスに接続するには、NSSpellCheckerクラスを使用します。NSIgnoreMisspelledWordsおよびNSChangeSpellingプロトコルは、スペルチェックのメカニズムをサポートしています。
抽象クラスであるNSNibConnectorと、2つの具象サブクラスであるNSNibControlConnectorとNSNibOutletConnectorは、Interface Builderにおいて接続を表します。NSNibControlConnectorはInterface Builderにおいてアクション接続を管理し、NSNibOutletConnectorはアウトレット接続を管理します。
標準的なMac OS Xインストールの一部として、アップルは(FoundationとApplication Kitに加えて)Cocoaプログラムインターフェイスを供給するフレームワークをいくつか盛り込んでいます(それらは、Carbonやほかのプログラムインターフェイスもベンドします)。このような二次的なフレームワークは、必須ではありませんが、必要な機能をアプリケーションに提供します。主な二次的なフレームワークとしては、次のものがあります。
Core Data—Core Dataフレームワークは、モデルオブジェクトのグラフを、そのライフサイクル全体を通じて、リレーショナルデータベースやフラットファイルでのデータの永続記憶も含めて管理できるようにプログラムを支援します。取り消しとやり直しの管理、値の自動検証、変化の伝播、Cocoaバインディングとの統合などの機能が含まれます。詳細については、“「Cocoaのその他のアーキテクチャ」”および『Core Data Programming Guide』を参照してください。
Sync Services—Sync Servicesを使って、既存の連絡先、カレンダー、ブックマークのスキーマや、自分のアプリケーションデータを同期することができます。既存のスキーマを拡張することもできます。詳細については、『Sync Services Programming Guide』を参照してください。
Address Book—このフレームワークは、連絡先などの個人情報に関する集中データベースを実装します。Address Bookフレームワークを使用するアプリケーションは、このような連絡先情報を他のアプリケーション(アップルのMailやiChatなど)と共有します。詳細については、『Address Book Programming Guide』を参照してください。
Preference Panes—このフレームワークを使うと、アプリケーション自体またはシステム全体のユーザ環境設定を記録するために、アプリケーションが動的にロードしてユーザインターフェイスを取得するプラグインを作成できます。詳細については、『Preference Panes』を参照してください。
Screen Saver—Screen Saverフレームワークは、システム環境設定によってロードして実行できるScreen Effectsモジュールを作成するのに役立ちます。詳細については、『Screen Saver Framework Reference』を参照してください。
Web Kit—Web Kitフレームワークは、ウインドウにWebコンテンツを表示するための一連のコアクラスを提供し、さらに、デフォルトで、ユーザがクリックしたリンクの追跡などの機能を実装しています。詳細については、『Web Kit Objective-C Programming Guide』を参照してください。
| < Previous PageNext Page > |
Last updated: 2006-05-23
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |