ココアに挨拶!
CocoaはMac OS Xのメインアプリケーション環境です(Carbonもありますが、この環境は主にMac OS 9用に記述されたコードをサポートするためにのみ使用されます)。iOSオペレーティングシステムの唯一のアプリケーション環境です。 オブジェクト指向ライブラリのセット、ランタイム環境、および開発環境で構成されています。
Mac OS Xユーザーが使用するほとんどのプログラム(MailやSafariなど)、さらにはiOSユーザーは、Cocoaを使用して作成されたプログラムです。
さて、Cocoaのアプリケーションを作成するには、有名なXcodeが使用されます。
どのように、何で?
すべてのアプリケーション環境と同様に、Cocoaには2つの世界があります。ランタイムの世界と 開発の世界。 ランタイムの世界では、Cocoaアプリケーションは、ユーザーインターフェイスを提供し、Mac OS Xのオペレーティングシステムの他のコンポーネント(FinderやDockなど)との緊密な統合を提供します。
しかし、開発の世界では、Cocoaはオブジェクト指向ソフトウェアコンポーネントクラスの統合セットであり、実際には、Mac OS XおよびIOS用のソフトウェアを作成できます。 ユーザーインターフェイスからデータ配列の管理まで、さまざまなことができます。
実際、Cocoaアプリケーションを開発するとき、いくつかのプログラミング言語を使用できますが、ネイティブ言語はObjective-Cです。これはANSI Cの拡張であり、OOPをサポートする構文およびセマンティック機能(Smalltalkに基づく)を備えています。 さらに、コードは、/ usr / includeのBSDライブラリなど、非Cocoaインターフェイスで定義された関数を呼び出すことができます。 さらに、C ++コードとCocoaコードを組み合わせて、実行ファイルでこのコンパイルされた奇跡を参照することもできます。
最も重要なCocoaライブラリは、各プラットフォームの2つの主要なフレームワーク、Mac OS X用のAppKitとIOS用のUIKitにパッケージ化されています。 すべてのフレームワークと同様に、動的にアクセス可能なライブラリー(および下位互換性に必要なライブラリーのいくつかのバージョン)だけでなく、ヘッダーファイル、APIドキュメント、および関連リソースも含まれます。 フレームワークは、MacまたはIOSでのプロジェクトにとって非常に重要なコンポーネントです。
Mac OS Xは、WebKitやAddress Bookフレームワークなど、他の多くの便利なライブラリもサポートしていますが、これについては後で詳しく説明します。
そして、Cocoaの友人はMac OS Xとどうですか?
アーキテクチャ的には、Mac OS Xは一連のソフトウェアレイヤーです(図1)。

図1. Mac OS Xが友人を作る方法です。
たとえば、Aquaインターフェースの動作を主に担当するシステムコンポーネントであるQuartz(Core Graphicsフレームワークに実装)は、アプリケーションサービスレイヤーの一部です。 しかし、このすべての中心にあるのがDarwin(Mac OS XおよびiOSで使用されるコアコンポーネントのセット)です。 Cocoaを含むMac OS X上のすべては、最終的にこのレイヤーに依存します。
Mac OS Xでは、CocoaはMac OS X用のアプリケーションの開発に必要な2つの主要なフレームワークで構成されています。
- AppKit アプリケーションフレームワークのコンポーネントの1つであるAppKitは、アプリケーションの画面表示を提供し、イベント処理を含むアプリケーションの動作の構造を定義します。
- コアサービスレイヤーのコンポーネントであるFoundationは、オブジェクトの基本的な動作を定義し、その管理メカニズムを確立し、プリミティブデータ型、コレクション、およびオペレーティングシステムサービスを使用する機能を提供します。
AppKitはFoundationに依存しており、Foundationは機能的にCore Servicesレイヤーにあります。 AppKitクラスをよく見ると、CocoaがMac OS Xの他の部分(Carbon Core、Core Graphics(Quartz)、Launch Servicesなど)に依存していることがわかります。
- コア財団。 多くのFoundationフレームワーククラスは、同等の不透明なCore Foundationクラスに基づいています。 この緊密な関係により、互換性のあるタイプのCore FoundationとFoundationの間の変換が「無料」になります。 次に、Core FoundationクラスはDarwinのBSDレイヤーを使用します。
- カーボンコア AppKitとFoundationは、Carbon Coreフレームワークを使用していくつかのシステムサービスにアクセスします。 たとえば、Carbonは、Cocoaがさまざまなファイルシステムを操作するために使用するCore File Managerを提供します。
- コアグラフィックス。 Cocoaは、ほとんどのグラフィック関連のタスクにCore Graphicsを使用します。
- サービスを起動します。 NSWorkspaceクラスは、Launch Servicesのコア機能を提供します。 また、CocoaはLaunch Servicesの機能を使用して、アイコンをアプリケーションおよびドキュメントに関連付けます。
Appleは、Cocoaを慎重に設計して、そのプログラミングインターフェイスの一部が、アプリケーションが通常必要とする基本機能へのアクセスを提供するようにしました。 ただし、そうでない機能が必要な場合
Cocoaインターフェースを介してアクセスできます。または、アプリケーションで発生していることをより細かく制御する必要がある場合は、メインフレームワークを直接使用できます(顕著な例は、Core Graphicsです。その関数を呼び出すことで、より強力なグラフィック管理ツールを取得できます)。
そして、CocoaのiOSの友達はどうですか?
iOSアプリ実行レイヤーはCocoa Touchと呼ばれます。 Cocoa Touchが実行されるiOSインフラストラクチャは、Mac OS XでCocoaが実行されるものと似ていますが、いくつかの大きな違いがあります(図2)。

図2.これがiOSの友達
通常、UIKitが使用するシステムライブラリとiOSフレームワークは、Mac OS Xのライブラリとフレームワークのサブセットです。ただし、iOSでサポートされるデバイスの性質により、
iOSに固有のフレームワークがいくつかあります。
以下は、各レイヤーのフレームワークの概要です。
- コアOS この層には、カーネル、ファイルシステム、ネットワークインフラストラクチャ、セキュリティ、電源管理、および多数のデバイスドライバーが含まれます。 特に、libSystemライブラリが含まれています。これはPOSIX / BSD 4.4 / C99 API仕様をサポートし、多くのサービスのAPIレベルのシステムを含みます。
- コアサービス 文字列操作、収集とネットワーク管理、連絡先管理、設定などの基本的なサービスを提供します。 また、デバイスのハードウェア機能(GPS、コンパス、加速度計、ジャイロスコープ)を使用することもできます。
- このレイヤーのフレームワークの例としては、Core Location、Core Motion、System Configurationがあります。
- このレイヤーにはFoundationとCore Foundationの両方が含まれており、文字列やコレクションなどの一部のデータ型を提供します。
- メディア Cocoa Touchレイヤーにマルチメディア機能へのアクセスを提供します。 Core Graphics、Core Text、OpenGLES、
- Core Animation、AVFoundation、Core Audio、およびビデオ再生サービス。
- ココアタッチ。 アプリケーションの直接サポートに従事。 ゲームキット、マップキット、iAdなどのコンポーネントが含まれています。
iOSのCocoaは、Mac OS XのCocoaと同様に、アプリケーションに基本機能へのアクセスを提供します。 また、Cocoa APIが提供する以上のものが必要な場合は、低レベルのメソッドを直接使用することもできます。
ソース-Cocoa Fundamentals Guide