FoundationとCore Foundation(1)

2010. 03. 18
●FoundationとCore Foundation

iPhone OSプログラミングの基礎となるフレームワークがFoundationとCore Foundationです。

iPhone OSの4つの階層、Core OS、Core Services、Media、Cocoa Touchの内、FoundationフレームワークはCocoa Touchレイヤに、Core FoundationフレームワークはCore Servicesレイヤに属します。

ただし、各フレームワークがどのレイヤに属しているかは、資料によってばらつきがあります。

例えば、Foundationフレームワークの場合、同じ『iPhone OSテクノロジーの概要』でも2009年5月27日版ではCore Servicesレイヤに、2008年10月15日版ではCocoa Touchレイヤになっています。

普通に考えれば後の資料の方が正しいとなるのですが、FoundationフレームワークがCore FoundationフレームワークをObjective-Cで包括したものという意味では、Core ServicesレイヤよりCocoa touchレイヤの方が適当とも考えられます。

いずれにせよ、中身や役割が変わるわけではないので、区分に特に意味は無いのかもしれません。

FoundationフレームワークCore Foundationフレームワーク
Cocoa TouchレイヤCore Servicesレイヤ
Objective-CクラスCクラス
OPENSTEP由来Carbon由来
 コレクションデータ型(配列、集合など)コレクションデータ型(配列、集合など)
 バンドルバンドル
 文字列管理 文字列管理
 日付と時刻の管理 日付と時刻の管理
 未加工データブロック管理 未加工データブロック管理
 環境設定管理 環境設定管理
 URLおよびストリーム操作 URLおよびストリーム操作
スレッドおよび実行ループ スレッドおよび実行ループ
 Bonjour ポートおよびソケット通信
通信ポート管理  
 国際化 

FoundationフレームワークとCore Foundationフレームワークはほぼ同じようなAPIを提供します。

異なる言語で同様の機能を提供する理由はMac OS Xが作られた経緯に因ります。

Mac OSの次世代化(プリエンティブマルチタスクやメモリ保護など、モダンOSとして不可欠な機能を盛り込もうとした、所謂Copland計画)で自社開発に失敗したAppleは、NeXTを買収してOPENSTEPをベースに次世代Mac OSを開発することにしました。

旧Mac OS用のアプリケーションを出自の全く異なる次世代OSへ移植するため、従来のAPIをベースにC言語で作られたのがCarbonと呼ばれるもので、C言語フレームワークはCarbonに由来します。

一方、OPENSTEPはObjective-C言語で書かれており、次世代Mac OSつまりMac OS Xに作り替えられた際に用意されたのがCocoaと呼ばれるAPIで、Objective-C言語フレームワークはCocoaに由来します。

このような歴史的経緯により、Mac OS XはC言語とObjective-C言語のAPIが混在することになり、Mac OS Xをベースに作られたiPhone OSも状況を引き摺っています。

将来的には全てObjective-Cになると予想されますが、FinderやQuickTimeでさえCocoaに書き換えられたのはMac OS 10.6で、まだCarbonで書かれている部分が残っているらしいので、すぐに使えなくなることはないでしょう。

Core FoundationはMac OS Xに旧Mac OSアプリケーションを移植するために容易されたAPIなので、Objective-C言語で書かれたFoundationをC言語で書き直したものと言えます。



参考文献

iPhone OSテクノロジーの概要

Foundation Framework Reference

Core Foundation Framework Reference

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る






コンパニオン20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

コンパニオン20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR