スマッシュを作ってみた(2)

2010. 02. 26
間が空いてしまいましたが、『iPhone SDKの教科書』のスマッシュを作ってみたに戻ります。

●SEの追加

UFOをタップした際の爆発音の追加では、System Sound Serviceを使っています。

前述の『Core Audioテクノロジーの概要』で触れましたが、System Sound ServiceはAudioToolbox.frameworkのAudioServices.hを利用しています。

System Sound Serviceの特徴は、以下の通りです。

・C言語インターフェイス
・30秒未満の短い再生時間
・レベル、定位、タイミングの制御不可(セッション管理を前提としていない)
・ループ、ステレオ再生不可
・バイブレーションの利用可
・リニアPCMまたはIMA4(IMA/ADPCM)フォーマット
・.caf、.aif、.wavファイル

まずサウンドIDオブジェクトを生成し、使用するオーディオファイルをシステムサウンドとして登録します。

OSStatus AudioServicesCreateSystemSoundID (
    CFURLRef    inFileURL,
    SystemSoundID    *outSystemSoundID
);

AudioServicesCreateSystemSoundIDは、inFileURLで指定したオーディオファイルの場所をoutSystemSoundIDにシステムサウンドとして登録します。

inFileURLは文字通りファイルの場所をURL形式で表した物で、ローカルにあるオーディオファイルもURL形式で渡さなければなりません。

実際には前処理としてオーディオファイルの取得を行っています。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Smash" ofType:@"caf"];
NSURL *url = [NSURL fileURLWithPath:path];

アプリケーションの実体はフォルダで、ヘッダファイルやソースファイル、画像やオーディオといったリソースファイルが入っており、この一まとまりをバンドルと言います。

そのバンドルの中にあるファイルにアクセスするのがNSBundleクラスで、mainBundleメソッドはNSBundleのインスタンスを返します。

Smashというファイル名の.cafファイルの場所をpathに入れ、NSURLクラスのfileURLWithPathメソッドでURL形式に変換しurlに代入し、AudioServicesCreateSystemSoundIDに渡しています。



参考文献

iOSアプリケーションプログラミングガイド

Core Audioの概要

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

Core Audioテクノロジーの概要

2010. 02. 25
Core Audioについて調べたら。また深みにはまってしまいました。

手持ちの参考書だと10ページ位でさらっと解説されている程度なんですが、本気で説明しようとするとそれだけで本1冊書けるので侮れません。

私はまだ買っていないのですが、参考までにご紹介を。

iPhone Core AudioプログラミングiPhone Core Audioプログラミング
(2009/11/12)
永野 哲久

商品詳細を見る

●Core Audioという名の誤解

iPhone OSの概要で、iPhone OSの音周りはMediaレイヤのフレームワークが行っていると書きました。

そこには、
  • Audio Toolbox
  • Audio Unit
  • AV Foundation
  • Core Audio
というフレームワークがあると紹介していて、Core Audioはいくつかのフレームワークの一つと書いています。

その一方で、『Core Audioの概要』という音周り全般を示すリファレンスがあったりと『?』という状態だったのですが、

Core Audio
とは、iPhone OSの音系テクノロジーの総称であると同時に、同名のフレームワーク(CoreAudio.framework)が存在する

と調べてみて、ようやく分かった次第です。

タチが悪いのは、CoreAudio.frameworkが音系フレームワークの最上位で、そこから各種フレームワークが派生しているわけではなく、他のフレームワークと同等の扱いだというのが、ややこしさに拍車をかけているような気がします。

例えば『iOSテクノロジーの概要』で、『AudioToolboxとAudioUnitフレームワークはCoreAudioフレームワークのファミリ』だという記述が有りますが、フレームワークのリファレンスを見ると、CoreAudioフレームワークから継承しているというわけではありません。

●Core Audio系フレームワーク

Core Audio系のフレームワークは大別して5種類有ります。

Core Audio Kit、Core MIDI、Core MIDI ServerフレームワークはMac OS X専用なので、iPhone OSでは使用できません。
  • AVFoundation

    簡易なオーディオ再生/録音と、セッション管理を行うObjective-Cインターフェイスを提供します。

    • AVAudioPlayer.h
      ファイルまたはメモリからオーディオデータの再生を行います。

    • AVAudioRecorder.h
      オーディオの録音を機能を提供します。

    • AVAudioSession.h
      オーディオセッションの管理を行います。

  • AudioToolbox

    一般的なオーディオファイルおよびストリームの再生/録音、セッション管理、フォーマット変換を行います。

    • AUGraph.h
      オーディオユニットの処理グラフを作成および使用し、オーディオ処理の入出力に関するインターフェイスを提供します。

    • AudioConverter.h
      リニアPCMと圧縮フォーマット間の変換を行います。

    • AudioFile.h
      オーディオファイルの読み込み、書き込み、初期化などを行います。

    • AudioFileStream.h
      オーディオファイルストリームを解析します。

    • AudioFormat.h
      オーディオファイルのオーディオフォーマットやコーデック情報を調べます。

    • AudioQueue.h
      オーディオの再生と録音を行うためのインターフェイスを提供します。

    • AudioServices.h
      システムサウンドや30秒以下の短いサウンド、バイブレーションが利用できます。

    • AudioToolbox.h
      Core Audioオブジェクトの内部情報を取得します。

    • ExtendedAudioFile.h
      リニアPCMオーディオファイルを圧縮変換、またはその逆変換を簡略化できます。

  • AudioUnit

    オーディオ処理のモジュールとしてオーディオユニットという単位を用い、任意長のサウンド再生や複数サウンドの同時再生など、低レベルな制御を行います。

    • AUComponent.h
      オーディオデータの処理や生成、プラグイン処理などのオーディオユニットの型を識別します。

    • AudioComponent.h
      オーディオコンポーネントを使用するためのインターフェイスを定義します。

    • AudioOutputUnit.h
      出力ユニットのオン/オフの切り替えに使用するインターフェイスを定義します。

    • AudioUnit.h
      AudioUnitフレームワークを利用するためのインクルードファイルです。

    • AudioUnitParameters.h
      ボリュームやピッチ、フィルタのカットオフ周波数など、オーディオユニットのパラメータを定義します。

    • AudioUnitProperties.h
      オーディオユニットのプラグインインターフェイスの一部で、キー値ペアや属性、オーディオストリームのフォーマットなどを定義します。

  • CoreAudio

    Core Audioテクノロジー全般で使用するデータ型や定数を定義します。

    • CoreAudioTypes.h
      Core Audioテクノロジー全般で使用するデータ型や定数を定義します。

  • OpenAL

    クロスプラットフォーム標準であるOpenALをサポートします。
    定位のオーディオ出力などが可能になります。

    • al.h
    • alc.h
    • oalMacOSX_OALExtensions.h
    • oalStaticBufferExtension.h
●Core Audio系サービス

理由は定かでは有りませんが、Core Audio系ではフレームワーク/ヘッダファイル単位での区分以外に『サービス』という区分もあります。

ほぼそのままな名前のヘッダファイルを単体で利用するものや、同名および関連ヘッダファイルを含めて利用することを『サービス』と呼称しているようなのですが、『Core Audioの概要』でも具体的な説明が為されていないのでよく分かりません。

  • AVAudioPlayerクラス
    AVFoundation.frameworkのAVAudioPlayer.hを利用したサービス。
    Objective-Cインターフェイスを使用し、サウンドの簡易再生を行います。

  • Audio Processing Graph Services
    AudioToolbox.frameworkのAUGraph.hを利用したサービス。
    オーディオ処理グラフの作成と操作を行います。

  • Audio Converter Services
    AudioToolbox.frameworkのAudioConverter.hを利用したサービス。
    オーディオデータフォーマットの変換を行います。

  • Audio File Services
    AudioToolbox.frameworkのAudioFile.hを利用したサービス。
    オーディオファイルまたはバッファからデータの読み書きをし、Audio Queue Serviceと組み合わせて再生/録音を行います。

  • Audio File Stream Services
    AudioToolbox.frameworkのAudioFileStream.hを利用したサービス。
    コールバックを通してオーディオデータとメタデータをアプリケーションに返し、Audio Queue Serviceと組み合わせてストリームの再生を行います。

  • Audio Format Services
    AudioToolbox.frameworkのAudioFormat.hを利用したサービス。
    オーディオデータフォーマットの情報を取得します。

  • Audio Queue Services
    AudioToolbox.frameworkのAudioQueue.hを利用したサービス。
    オーディオの再生/録音と、再生の一時停止、再開、ループ再生、複数チャネルの同期を行います。

  • System Sound Services
    AudioToolbox.frameworkのAudioServices.hを利用したサービス。
    短いサウンドや警告音、バイブレーションを利用します。

  • Audio Session Services
    AudioToolbox.frameworkのAudioServices.hを利用したサービス。
    オーディオセッションの管理を行います。

  • Audio Unit Services
    AudioUnit.frameworkのAUComponent.h、AudioComponent.h、AudioOutputUnit、AudioUnitParameters.h、AudioUnitProperties.hを利用したサービス。
    オーディオユニットの読み込みと使用を行います。

  • OpenAL
    OpenAL.frameworkのal.h、alc.h、oalMacOSX_OALExtensions.h、oalStaticBufferExtension.hを利用したサービス。
    ゲームアプリケーション向けとして、定位オーディオを利用します。



参考文献

iOSテクノロジーの概要

iOSアプリケーションプログラミングガイド

Core Audioの概要

0 CommentsPosted in 資料

スマッシュを作ってみた(1)

2010. 02. 23
引き続き『iPhone SDKの教科書』のスマッシュを作ってみました。
例によってフォロー分のみ記述します。

●ステータスバーの消去

『UIStatusBarHidden』というRaw Keyは『Status bar is initially hidden』になります。

●scheduledTimerWithTimeInterval

NSTimerクラスのクラスメソッドの1つで、新規にNSTimerオブジェクトを作り、一定時間間隔でメソッドを返します。

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
(NSTimeInterval)secondsタイマーの時間間隔を秒単位で指定します。
0秒以下の場合、0.1ミリ秒に補正されます。 
(id)targetタイマー作動時に呼び出すインスタンスオブジェクトを指定します。
(SEL)aSelectorタイマー作動時のNSTimerを引数とするメソッドを指定します。
(id)userInfoメソッドを呼び出す際に渡す情報。渡す情報が無い場合はnil。
(BOOL)repeatsYESならタイマー動作を繰り返します。
NOなら一度の呼び出しで終了します。

SelectorやuserInfoは調べたけどよく分からないので保留。

●UFO(Round Rect Button)の座標

UFOはRound Rect Buttonで作られており、UIButtonクラスのインスタンス変数targetとして宣言されています。

このUIButtonクラスは、NSObject→UIResponder→UIView→UIControl→UIButtonと継承されています。

表示位置の設定はUIViewクラスで行われており、これが本文中の『すべてのビューアイテムはcenterプロパティで表示位置を設定できる』の意味に繋がります。

UIView.h内でCGPoint型のプロパティとして宣言されています。

@property(nonatomic) CGPoint    center;    // center is center of frame. animatable

CGPointはCGFloat型というFloat型の値を持った、二次元座標を示す構造体です。

疑似ランダム値を得るrand関数(int rand(void))は、stdlib.hで宣言されているC言語の標準ライブラリ関数です。

疑似ランダム値をランダム値に近づけるために、同ライブラリのsrand関数(void srand(unsigned))を使い、引数にtime関数で現在時間を渡しています。

time関数(time_t time(time_t *))は、time.hで宣言されているC言語の標準ライブラリ関数で、グリニッチ標準時1970年1月1日00:00:00からの経過秒数を返します。

●UIViewを使ったアニメーション

UIViewクラスには簡易アニメーション機能が有り、beginAnimations:context:メソッドの呼び出しで始まり、commitAnimationsメソッドの呼び出しで終了します。

両メソッドの間にアニメーション効果を記述すると、commitAnimationsメソッドの呼び出しで効果が実行されます。

(void)beginAnimations:
(NSString *)animationID
 context:(void *)context
アニメーションの設定を開始します。
animationIDは複数のアニメーションがある場合の識別子
です。 
(void)commitAnimations:アニメーションの設定を終了し実行します。
(void)setAnimationStartDate:
(NSDate *)startTime 
commitAnimationsメソッドから戻った後、次にアニメー
ションを開始する日時を指定します。
開始時刻はCFAbsoluteTimeGetCurrentで得られます。
デフォルトでは即時実行されます。 
(void)setAnimationsEnabled:
(BOOL)enabled 
アニメーションの有効/無効を設定します。
デフォルトは有効です。 
(void)setAnimationDelegate:
(id)delegate 
デリゲートを割り当て、アニメーションの開始時と終了
時に追加タスクを実行できます。
デフォルトはnilです。
(void)setAnimationWillStartSelector:
(SEL)selector 
アニメーション開始時にメッセージを受信するセレクタ
を指定します。
(void)setAnimationDidStopSelector:
(SEL)selector 
アニメーション終了時にメッセージを受信するセレクタ
を指定します。
(void)setAnimationDuration:
(NSTimeInterval)duration 
アニメーションの実行時間を秒単位で指定します。
デフォルトは0.2秒です。 
(void)setAnimationDelay:
(NSTimeInterval)delay
commitAnimationsメソッドから戻った後、次にアニメー
ションを開始するまでの待機時間を指定します。
デフォルトは0.0秒です。 
(void)setAnimationCurve:
(UIViewAnimarionCurve)curve
アニメーション効果の遷移速度を設定できます。 
遷移速度の指定はUIViewAnimationCurveで行います。 
(void)setAnimationRepeatCount:
(float)repeatCount 
アニメーションの繰り返し回数を設定します。
デフォルトは繰り返ししません。 
(void)setAnimationRepeatAutoreverses:
(BOOL)repeatAutoreverses 
アニメーションが設定値に達した際に巻き戻すかどうか
を設定します。
デフォルトはNOです。 
(void)setAnimationBeginsFromCurrentState:
(BOOL)fromCurrentState 
YESの場合アニメーションを開始し、NOなら何もしま
せん。
デフォルトはNOです。 
(void)setAnimationTransition:
(UIViewAnimationTransition)transition
 forView:(UIView *)view
 cache:(BOOL)cache
viewに対してtransitionでアニメーションの遷移方法を
指定します。 
cacheがYESの場合遷移する画像をキャッシュするため
描画が速くなり、NOの場合アニメーション速度が低下
します。 
(BOOL)areAnimationsEnabledアニメーションが有効ならYES、無効ならNOを返しま
す。 

UIViewAnimationCurveには4種類あります。

UIViewAnimationCurveEaseInOutゆっくり始まって徐々に加速し、中盤から減速する
UIViewAnimationCurveEaseInゆっくり始まり、徐々に加速します
UIViewAnimationCurveEaseOut速く始まり、徐々に原則します
UIViewAnimationCurveLinear等速度で進行します

本書ではデフォルトがUIViewAnimationCurveLinearとなっていますが、『UIView Class Reference』ではUIViewAnimationCurveEaseInOutになっています。

UIViewAnimationTransitionには5種類有り、アニメーションの遷移方法を指定します。

UIViewAnimationTransitionNone指定無し
UIViewAnimationTransitionFlipFromLeft中央の垂直軸中心に右回転で遷移
UIViewAnimationTransitionFlipFromRight中央の垂直軸中心に左回転で遷移
UIViewAnimationTransitionCurlUp下から上にカールして遷移
UIViewAnimationTransitionCurlDown上から下にカールして遷移

●リトルエンディアンとビッグエンディアン

エンディアンとは、2バイト以上のデータをメモリに格納したり、データ転送する際の方式のことで、バイトオーダーとも呼ばれます。

2バイト以上のデータの場合、1バイト毎に格納または転送するのですが、この際に下位アドレスから拾うのがリトルエンディアン、上位アドレスから拾うのがビッグエンディアンです。

元データ0x0123456789ABCDEF
リトルエンディアン
EFCDAB8967452301
ビッグエンディアン
0123456789ABCDEF

エンディアンの違いは、メモリ格納の場合はCPUに依存し、OSは無関係です。

初期のMac(所謂『68k Mac』)に搭載していたMotorolaのMC68000系はビッグエンディアン。

主にPowerMacに搭載していたIBM/MotorolaのPowerPC系はG5を除きバイエンディアン(両対応)でしたが、68k CPUとの互換性やG5がビッグエンディアンであることからビッグエンディアンで動かしていたと思われます。

それだけに、リトルエンディアンであるIntelの80x86系への以降は当時話題になりました。

iPhone/iPod touchが採用しているARM系はバイエンディアンなのですが、リトルエンディアンで動いていると思われます(未確認。CFByteOrderGetCurrentで分かるという話もあります)。



参考文献

NSTimer Class Reference

UIButton Class Reference

CGGeometry Reference

UIView Class Reference

初心者のためのポイント学習C言語/ライブラリ関数一覧

iOSアプリケーションプログラミングガイド

福井高専IT研究会OfficialWiki

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

カウンターを作ってみた

2010. 02. 20
二週間以上基礎知識のお勉強してきまして、久しぶりの実践です。

iPhone SDKの教科書』に載っているカウンタを作ってみたのですが、カウンター作りは本を読んでいただくとして、フォロー分のみ書きます。

●iPhone SDK 3.1.3

iPhone本体のアップデートはしていましたが、SDKのアップデートを忘れていました。
(2月2日にリリースされています)

ちなみに本体をアップデートしてSDKのアップデートをしていないと、こういう画面が出てきます。

185

この状態ですと実機テストができないので、iOS Dev Centerに行って落としてきましょう。
(iPhone SDK 3.1.3は、Snow Leopard版だけではなくLeopard版もあります)

●Interface Builderの細かい仕様変更

アウトレットやアクションを接続する際、本文では『オレンジ色で囲まれた表示になったら』とありますが、現在(ver3.2.1)では『水色』になっています。

●updateDisplayについて

ラベルへの画面表示を担う『updateDisplay』というインスタンスメソッド。
やっている内容は分かるんですが、CounterViewController.hで宣言もされていなければ、呼び出しで [self updateDisplay]; となっていて、『selfって何?』状態になったので調べてみました。

ちなみに宣言しなくてもコンパイルでエラーも吐きませんし、実行も問題ありません。
逆に宣言だけして実装しないと、コンパイルは通りますが警告は出ます。

●selfについて

ルートクラス(Foundationフレームワークなどの大元)であるNSObjectで宣言されています。
glass-_-onionさん記事によると、『呼び出そうとしている自分のインスタンス内で、メソッドやインスタンス変数を使う』ことを表しているそうです。

いまいちピンときませんが、深追いすると『プロトコルって何?』という話になりそうなので止めました。

●カウンタで使う画像ファイル

著者である赤松正行さんのサイト『akalogue』内に本書のサポートページがあります。
サンプルコードやデザインファイルも置いてありますので、ありがたく使わせていただきます。

●Round Rect Buttonの設定

『ボタン状態のポップアップメニューでNormalを選ぶ』とありますが、このメニューは

186

インスペクタウィンドウのTypeとTitleの間にありますが、メニューの表記が本文と異なっています。

187

『Normal』は『Defaults State Configuration』になっています。

●iPhoneの搭載フォント

iPhoneで使用可能なフォントのリストもアップデートされまして、赤松さんのサイトでも一覧が更新されています

tokoromさんのサイトでは各フォントのイメージも掲載されています。

また、Kanotomoさんの『Cédille』というiPhone Appでは、実機で搭載フォントの確認ができます。

●アイコンの非光沢化

プロパティリストの編集ですが、『UIPrerenderedIcon』というRaw Keyは『Icon already includes gloss and bevel effects』です。

ValueはBooleanに選択せずとも自動でチェックボックスになるので、チェックします。

ただ(私の環境下では)、チェックボックスのON/OFFで『ビルドと実行』をしてもシミュレータも実機も変化しませんでした。

どうもキャッシュか何かに設定が残っているようで、アプリケーションを削除しての再インストールや、シミュレータの再起動でも治りません。

アイコンに変化が無い場合は『iPhoneシミュレータ』メニューから『コンテンツと設定をリセット』でリセットをかけると正常に反映されます。
(実機はリセットすると面倒なことになるので試していません)



参考文献

A Day In The Life/Objective-C 3分クッキング

akalogue/iPhone SDKの教科書

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

Objective-C言語のメモ書き(2)

2010. 02. 18
iPhone SDKの教科書』でのプロパティの解説が少々物足りなかったので、調べてみました。

●カプセル化

・オブジェクトの変数へのアクセスに制限を設けて内部を隠蔽すること
・必要な変数へのアクセスのみ許可することで、不用意に他の変数が改ざんさせないようにする
・インターフェイスを変更しなければ、内部の処理を改訂しても呼び出し側を修正しなくて済む
・インスタンス変数への外部からのアクセスは、基本的にアクセサメソッドを使わなければならない

●アクセサメソッド


・アクセサメソッド:オブジェクトの状態を設定または取得するインスタンスメソッド
・単に『アクセサ』と呼ぶ場合もある
・インスタンス変数を設定するアクセサは『setアクセサ』または『setter』
・インスタンス変数を取得するアクセサは『getアクセサ』または『getter』
・つまりsetterとgetterを合わせてアクセサ(accesser)と呼ぶ

●プロパティ

・Objective-C 2.0で実装された簡易アクセサメソッド
・インスタンス変数を使おうとする度に、毎回アクセサを記述するのが面倒なために導入された
・メソッドを呼び出すために、実行速度では不利になる
・自動で付けられるアクセサ名はキー値コーディングの規則に従います
・プロパティの宣言:@property (属性) 変数型 変数名;
・プロパティの実装:@synthesize 変数名;
・プロパティの実装(実行時にアクセサが動的に追加される場合):@dynamic 変数名;
・プロパティの属性:メソッドとインスタンス変数の合成を管理するパラメータ
・手動でアクセサ名を付ける属性:setterはreadonlyとの共用不可
    getter=getterName:getterの名前を指定します。引数は無し。プロパティと同型を返す
    setter=setterName:setterの名前を指定します。引数は1つ。voidを返します
・setterの生成の属性:readonly/readwriteは排他使用です。デフォルトはreadwrite
    readonly:読み取り専用
    readwrite:読み取り/書き込み可能
・setterでの取り扱いの属性:assign/retain/copyは排他使用です。デフォルトはassign
    assign:setterで単純代入を使用する場合に指定します
    retain:値をすぐに破棄したくない場合に指定します
    copy:代入にオブジェクトのコピーを使用することを指定します
・マルチスレッド環境の属性:デフォルトではアトミック(atomicという属性はありません)
    nonatomic:マルチスレッド環境でのデータの保証をしない代わりに高速アクセス可能
・プロパティへのアクセス:インスタンス名.プロパティ名

※『キー値コーディング』や『アトミック』に関しては調べても理解できなかったので保留。

利便性は高そうですし、公式サンプルコードのHalloWorldでも使っているので、利用を推奨しているんだと思いますが、理解して使うには敷居が高そうです。

この辺はサンプルコードの解析の際に改めて追いかけたいと思います。



参考文献

viva Cocoa/Objective-C 2.0言語 簡易版/宣言されたプロパティ

POPINO BLOG/iPhoneアプリのメモリ管理 その3

@IT/Cocoaの素、Objective-Cを知ろう/第3回 Objective-Cのクラス定義を理解しよう

ダイナミックObjective-C/プロパティ(1) - インスタンス変数のアクセス制御

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

Objective-C言語のメモ書き(1)

2010. 02. 16
いよいよ本題のObjective-C言語のお話です。

Objective-C言語は『C言語にオブジェクト指向機能を付加したもの』と説明されます。

実際、iPhone OSのフレームワークがC言語とObjective-C言語のものが混在しており、プログラムでも両言語の記述が混在しています。

●id型

iPhone SDKの教科書』の本文中、唐突に『id型』の話が出てくるので補足します。

id型:クラスオブジェクトとインスタンスオブジェクトのデータ構造体への汎用ポインタ

基本的に変数もメソッドも、オブジェクトからの戻り値は(指定しない限り)全てid型を返します。

ただ全てid型で宣言してしまうとプログラムする側の可読性が落ちますので、明示できるものはクラス型を宣言した方がいいそうです。

id型はポインタですが、宣言時に*(アスタリスク)を付ける必要はありません。

●変数宣言とメソッド呼び出し

・変数の宣言(C言語と同じ):変数の型 変数名;
・オブジェクトの変数の宣言(変数型を指定する場合):クラス名 *変数名;
・オブジェクトの変数の宣言(変数型を指定しない場合):id 変数名;
・オブジェクトの変数への文字列の代入:変数名 = @"文字列";
・オブジェクトの変数やメソッドはポインタで宣言するので、使用時にはアスタリスクを付け無い
・オブジェクトのメソッド呼び出し(戻り値が無い場合):[オブジェクト メソッド];
・オブジェクトのメソッド呼び出し(戻り値が有る場合):変数 = [オブジェクト メソッド];
・オブジェクトのメソッド呼び出し(引数が1つの場合):
   [オブジェクト メソッド:(引数型)引数名];
・オブジェクトのメソッド呼び出し(引数が2つの場合):
   [オブジェクト メソッド:(引数1型)引数1名 キーワード名:(引数2型)引数2名];
・引数が3個以上の場合:キーワード名以降を同様に書く

引数が複数の際に突然現れるキーワード名(メッセージキーワード)ですが、本来引数が1つの時でも書くべきものを省略しているようです。
つまり、

[オブジェクト メソッド キーワード1:(引数1型)引数1名 キーワード2:(引数2型)引数2名];

と記述するはずのところ、『キーワード1』を端折ったと考えてください。

●インスタンスの生成と解放

・インスタンスの生成:インスタンス名 = [クラス名 生成メソッド];
・インスタンス生成メソッドは alloc
・インスタンスの初期化:インスタンス名 = [クラス名 初期化メソッド];
・インスタンス初期化メソッドは init 、または init で始まるメソッド
・初期化メソッドをイニシャライザ(Initializer)と呼ぶ
・インスタンスの解放:[インスタンス名 release];
・生成したインスタンスは必ず解放する。解放しないとメモリを確保したまま圧迫してしまう
   (所謂『メモリリーク』の状態になる)
・メソッド呼び出しの多重化(インスタンスの生成と初期化を同時に行うなど)
   インスタンス名 = [[クラス名 生成メソッド] 初期化メソッド];
・nil:NULLオブジェクトで、オブジェクトが未初期化あるいはクリアされた状態を表す
   (と、あるのですが、どういう時にどう使うのかさっぱりなので保留します)

●インスタンスの管理と自動解放

・リファレンスカウンタ(参照カウンタ)は、インスタンスが確保したメモリの要不要を示す値
・インスタンス生成時のリファレンスカウンタの初期値は1で、0になるとメモリを解放する
・releaseはリファレンスカウンタを1減らし、retain は1増やす
・オブジェクトをしばらく使いたいからメモリを解放したくない場合はretainでカウンタを増やす
・retainで増やした場合、releaseしてもカウンタが0にならず、解放されない場合もあるので注意
・インスタンス生成時にautoreleaseメソッドを呼び出し、処理完了後に自動解放させることもできる
・ただし、呼び出し側でretainされた場合、autoreleaseしても自動解放されないので注意
・自動解放はNSAutoreleasePoolクラスを使うので、プログラム中に処理記述が必要
(テンプレートから起こす場合は、自動でmain.mに書いてくれる)

●クラスとメソッド

・そのクラスにどのようなメソッドがあるかはヘッダファイルかリファレンスを見る必要がある
・メソッドにはクラスに対するクラスメソッドとインスタンスに対するインスタンスメソッドがある
・クラスメソッドの宣言、定義では行頭に + を書く
・インスタンスメソッドの宣言、定義では行頭に - を書く

●クラスの宣言

・Objective-C言語では、基本的にクラス毎にファイルを作る
・またクラス宣言を行うヘッダファイル(.h)とクラス実装を行うソースファイル(.m)を別に作る
・クラス宣言を行うヘッダファイル(.h)
#import <ヘッダファイル名>
@interface クラス名 : スーパークラス名
{
    インスタンス変数の宣言 ;
}
+ (戻り値の型)クラスメソッド ;
-  (戻り値の型)インスタンスメソッド ;
@end 
・元になるクラスのヘッダファイルの読み込み:#import
・クラス宣言の内容は、@interface と @end の間に記述する
・クラス名は必ず大文字から始まる
・元になるスーパークラスは必須(特に無い場合はルートクラスのNSObjectを設定する)
・メソッドの宣言(戻り値が有る場合):- (戻り値の型)メソッド名;
・メソッドの宣言(引数が1つの場合):- (戻り値の型)メソッド名 : (引数型)引数名;
・メソッドの宣言(引数が2つの場合):
   - (戻り値の型)メソッド名 : (引数1型)引数1名 キーワード名:(引数2型)引数2名;
・引数が3個以上の場合:キーワード名以降を同様に書く

●クラスの実装

・クラス実装を行うソースファイル(.m)
#import "ヘッダファイル名"
@implementation クラス名
- (戻り値の型)インスタンスメソッド名
{
    メソッドの実装
}
@end
・通常、ヘッダファイルはソースファイルとは別なので、ヘッダファイルを読み込む
・クラス実装(メソッドの処理)の内容は、@implementation と @end の間に記述する
・内部処理用のメソッドを記述する場合、@implementationの前にメソッドの宣言を行う
(内部処理用メソッドの宣言はヘッダファイルで行わなくてもよい)

※2010.3.12訂正
『- (戻り値の型)インスタンスメソッド名』が抜けていたため、追加しました。

※2010.6.1訂正
クラス実装の内容は『@interfaceと@endの間』と記述していましたが、『@implementationと@endの間』の間違いでした。お詫びして訂正いたします。



参考文献

Objective-C入門/静的な型

ダイナミックObjective-C/Objective-Cの動的型付け

@IT/Cocoaの素、Objective-Cを知ろう/第3回 Objective-Cのクラス定義を理解しよう

As Sloth As Possible/詳解Objective-C 2.0読書会に行ってきた

The comp.lang.objective-C FAQ listing 日本語訳

@IT/Cocoaの素、Objective-Cを知ろう/第7回 メモリ管理を理解する(前編)

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

オブジェクト指向プログラミングのメモ書き

2010. 02. 16
次は難解なオブジェクト指向プログラミングについてです。
オブジェクト指向ほど『何度も見聞きしているけど理解できないもの』はないってくらいです。
私も未だに理解していませんが、必要最低限のポイントを抑える道標を探ってみたいと思います。

●オブジェクト指向の概念は調べない

Wikipediaのオブジェクト指向を見てみると、『オブジェクト指向プログラミングから始まり、システム開発の分析や設計にも広がっている』とあります。

それらを包括するような概念を話されても抽象的過ぎて分かりませんし、定義自体が酷く曖昧なので混乱の元になります。

試しに『オブジェクト指向』でググると上位にくるサイトを例に取ると、

・『オブジェクト指向は難しくない!
オブジェクト指向は業務分析や要求定義などの上流行程もカバーする

・『5分で絶対に分かるオブジェクト指向
オブジェクトは責務を持ち、メッセージにより強調動作する自律分散協調モデルです

と、プログラミングに直接関係無い説明が為されたり、分かり易くしようと例えた比喩に惑わされたりします。

必要なのはプログラミングに関する話なので、オブジェクト指向そのものの概念は追求しない方がいいと思われます。

●Objective-C言語以外のプログラミング言語は調べない

一口にオブジェクト指向プログラミングといっても、C++、Java、Perl、Delphiなどなど、メジャーからマイナーまで多数の言語があります。

問題なのは、着想は同じでも設計思想や実装方法が異なるため、クラスやメッセージ、メソッド、インスタンスなど、同じ単語を用いて説明していてもプログラミング手法として互換性が無い点です。

既に習得されている方はともかく、プログラミング未経験の方はObjective-C言語以外の情報は仕入れない方がいいと思います。

そうすると見るべき資料が格段に少なくなりますし(世間一般ではマイナーな言語なので)、無用の混乱を未然に防ぐこともできます。

つまり『Objective-C言語を通してオブジェクト指向とプログラミングを考える』ことに特化すれば、少しは見通しが立つと思われます。

●あらためて『オブジェクト指向』とは

上記のようにオブジェクト指向を難解たらしめているのは、

・風呂敷を広げすぎた抽象的な概念
・専門用語を駆使した伝える気が無さそうな解説
・もしくは比喩を多用しプログラミングと乖離した解説

にあると言えます。

色々調べてみましたが、プログラミングを始めようという読者側の立場を理解し、具体的かつ比喩の少ない、カワサキタカシさんの『Objective-C入門番外編:オブジェクト指向って何だろう?』の説明が分かり易いです。

上記の記事を元にオブジェクト指向を要約すると、

楽をしたい=オブジェクト指向

同じような(ほとんど同じだけど一部異なる)作業を繰り返す。
尚かつそれが複数あって個々に動かしたい。
その為にそれぞれコードを書くのは面倒なので、基本となるコードを1個作って、後は異なる部分だけを書き換えて使えるようにしよう・・・というのが動機となり、

基本となるコード(設計図)クラス
設計図を元に作ったモノ(実物)インスタンス
基本となる動作の内容メソッド
個別の指示メッセージ

と考え、クラスやインスタンスというモノを『オブジェクト』と呼び、プログラムを『オブジェクトに対するメッセージとして記述』しようというのがオブジェクト指向です。多分。

●オブジェクト(Object)とメッセージ(Message)

・オブジェクトは変数とメソッドを内包したクラス、およびインスタンスのこと
・オブジェクトが他のオブジェクトに働きかけることをメッセージと呼ぶ
・オブジェクト同士がメッセージをやりとりすることでプログラムが動く

●クラス(Class)とインスタンス(Instance)

・クラスは設計図
・設計図を元に作った実物の製品がインスタンス
・一つのクラスからインスタンスは複数作ることが可能

●クラスの継承(Inheritance)

・あるクラスを元に一部を改変した新しいクラスを作ることができる
・元のクラスをスーパークラス(Superclass)と呼ぶ
・一部改変し、それ以外の特性を受け継いだクラスをサブクラス(Subclass)と呼ぶ
・サブクラスからサブクラスを作ることもできる
・複数のスーパークラスからサブクラスを作る多重継承はObjective-Cにはできない

●変数(Variable)とメソッド(Method)

・変数はC言語と同様、何らかの値を保持するもの
・メソッドはオブジェクトが内包するC言語でいう関数のようなもの
・オブジェクトにメッセージを送ると、そのメッセージに対応するメソッドが応答する
・オブジェクト内部の状態や動作を隠蔽することをカプセル化(Encapsulation)という
・サブクラスがスーパークラスと同名のメソッドを記述して機能を上書きすることをオーバーライドと呼ぶ



参考文献

サルにもできるiPhoneアプリの作り方 Step2/Objective-C入門番外編:オブジェクト指向って何だろう?

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

C言語のメモ書き

2010. 02. 14
iPhone SDKの教科書』を読み進めて、ハード仕様やXcodeについてメモ書きをしてきました。

Interface Builderに関しては過去記事に少し追記しています。

スナップショット、ドキュメントウィンドウ、デバッガ、オーガナイザ、iPhone Simulator、Instrumentsに関しては、補完するようなことがなかったり、使ってみないと分からない項目でしたので端折っています。

それでは第2部のC言語とObjective-C言語の話に入ります。

ただ、ここでは言語の解説はしません。
参考文献を読んだ上で(自分なりの)要点をメモしていくだけですので、解説に関しては元の本または解説サイトを参照してください。

●Objective-C言語とC言語

・iPhoneアプリケーションはObjective-C言語でプログラミングを行う
・ただし下位レイヤのフレームワークはC言語で書かれていることが多い
・Objective-C言語はC言語にオブジェクト指向の機能を付加したもの
・従って、いずれにしてもC言語は習得する必要がある

●C言語のプログラム

・C言語では最初にmain関数が自動的に呼び出される
・関数の宣言:戻り値型 関数名(引数)
・関数の内容は { と } で括る
・文は ; で区切る。一行に複数文書いたり、一文を複数行に書いてもいい
・半角スペースやタブは無視される(全角スペースは使用不可)
・コメントは /* と */ の間、もしくは // で始まる行
・ヘッダファイルは #include で読み込む
・< > はシステム的なヘッダ、" " はソースファイルと同じフォルダを優先して探す

●変数と演算

・変数の宣言:型 変数名 ;
・変数の初期化:変数名 = 値または式 ;

・データ型
int整数
char文字列
float単精度浮動小数点実数
double倍精度浮動小数点実数

・算術演算子
+加算
-減算
*乗算
/除算
%剰余算

●関数

・関数の呼び出し:戻り値 = 関数(引数) ;
・定数の宣言:#define 定数名 定数値

●制御構造

・if文:条件二分岐
if (条件式)
{
    条件式が真の場合の処理 ;
}
else
{
    条件式が偽の場合の処理 ;
}

・比較演算子
==左辺と右辺の値が一致
!=左辺と右辺の値が不一致
>左辺が右辺より大きい
>=左辺が右辺以上
<左辺が右辺より小さい
<=左辺が右辺以下

・switch文:引数が整数の場合の多分岐
switch (引数)
{
    case 値1 :
        条件式が値1の場合の処理 ;
        break ;
    case 値2 :
        条件式が値2の場合の処理 ;
        break ;
    default :
        条件式を満たさない場合の処理 ;
        break ;
}

・for文:条件を満たしている間の繰り返し処理
for (初期化式 ; 条件式 ; 更新式)
{
    繰り返し処理 ;
}



参考文献

C言語入門

C言語入門講座

初心者のためのポイント学習C言語

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る

Xcodeのプロパティリストエディタ

2010. 02. 14
グループとファイル』のResourceグループに『info.plist』というプロパティリストファイルがあります。

181

info.plistを選択すると、テキストエディタウィンドウに表形式でプロパティリストが表示されます。

またプロパティリストエディタは単体のアプリケーションとして、Macintosh HD/Developer/Applications/Utilities/Property List Editor.appに存在します。

●info.plist

info.plistは情報プロパティリストというファイルで、アプリケーション名やアイコンなど、アプリケーションの設定情報を含みます。

これらの情報は、Xcodeが自動設定するものと、明示的に設定する必要があるものがあります。

ここでいうバンドルは、画像やテキストなどのファイルを一纏めにした形式を指し、実行ファイルを含めたアプリケーションのファイル群をアプリケーションバンドルと呼びます(多分)。

キーというのがいまいち理解しきれていないのですが、キーと値(Key/Value)の一対でプロパティを表すということのようです。

キー欄上で右クリックかcontrol+クリックでコンテキストメニューを開き、『Show Raw Keys/Values』を選択すると、実際のキーの名前を表示することができます。

Key Value
Localization native
development region
CFBundleDevelopmentRegion en
Bundle display name CFBundleDisplayName HelloWorld
LSRequiresIPhoneOS LSPequiresIPhoneOS [v]
Executable file CFBundleExecutable ${EXECUTABLE_NAME}
Icon file CFBundleIconFile icon.png
Bundle identifier CFBundleIdentifier com.yourcompany.${PRODUCT_NAME:identifier}
InfoDictionary
version
CFBundleInfoDictionaryVersion 6.0
Bundle name CFBundleName ${PRODUCT_NAME}
Bundle OS Type
code
CFBundlePackageType APPL
Bundle creator OS
Type code
CFBundleSignature ????
Bundle version CFBundleVersion 1.7
Main nib file base
name
NSMainNibFile MainWindow

キーの詳細は『Runtime Configuration Guidelines』を参照となっていますが、ポッチンさんが和訳されていましたので、参考にさせていただいてます。
(※2012.11.16追記:後に自力で和訳したものが『ランタイム構成のガイドライン』です)

●Localization native development region(CFBundleDevelopmentRegion)

アプリケーションのデフォルトの言語を指定します。
(日本語環境下で作ってもデフォルトは英語になっているようです)

●Bundle display name(CFBundleDisplayName)

アプリケーションのアイコン下に表示する名前。
他言語対応のアプリケーションの場合は、サポートする全言語についてローカライズします。

●LSRequiresIPhoneOS(LSRequiresIPhoneOS)

バンドルがiPhone OSでのみ実行可能かどうかを示す値で、Xcodeが自動的に追加し、値をtrueに設定します。
変更してはいけません。

●Executable file(CFBundleExecutable)

アプリケーションの実行可能ファイルの名前を設定します。

●Icon file(CFBundleIconFile)

アプリケーションのアイコンファイルを指定します。

●Bundle identifier(CFBundleIdentifier)

システムがアプリケーションを識別するための識別子。
アルファベットとピリオドのみで構成するUTI(Uniform Type Identifier)で、逆DNS形式にしなければなりません。
この文字列はバンドル識別子として割り当てられ、アプリケーションの署名の検証に使用します(App IDの作成で使います)。

●InfoDictionary version(CFBundleInfoDictionaryVersion)

プロパティリスト構造の現在のバージョンを示し、Xcodeにより自動で設定されます。

●Bundle name(CFBundleName)

アプリケーションの短縮名を識別するため、この名前は16文字以下に設定する必要があります。

●Bundle OS Type code(CFBundlePackageType)

バンドルのタイプを示す4文字の識別子で、アプリケーションの場合は『APPL』になります。

●Bundle creator OS Type code(CFBundleSignature)

アプリケーションのクリエータを識別する4文字の識別子で、テキストエディタの場合『ttxt』になる・・・とありますが、それ以外はどうなのかよく分かりません。

●Bundle version(CFBundleVersion)

バンドルのビルドバージョン番号を指定する文字列で、ピリオドで区切られた1個以上の整数で構成されます。

●Main nib file base name(NSMainNibFile)

アプリケーションのメインnibファイルを示す文字列。
デフォルト以外のnibファイルを使う場合は、そのnibファイルに関連付けします。



参考文献

iOSアプリケーションプログラミングガイド

ポッチンルーム/実行時設定ガイドライン

0 CommentsPosted in 資料

Xcodeのテキストエディタ

2010. 02. 13
●テキストエディタウィンドウ

ソースファイルやヘッダファイルの表示・編集を行います。

179

  • ガーター(Gutter)
  • 行番号を表示します。
    デフォルトでは非表示になっており、Xcodeメニューの環境設定で『テキスト編集』を選び、表示オプションの『行番号を表示』にチェックを入れると表示されます。
    行番号をクリックするとブレークポイントを設定できます(解除は右クリックし、メニューから選択)。

  • フォーカスリボン(Focus ribbon)
  • ソースコードで、関数などの一まとまりを濃淡で示し、クリックで折り畳みができます。

  • ナビゲーションバー(Navigation bar)
  • ボタンやポップアップメニューでファイルの切り替えなどを行います。

  • コンテントペイン(Content pane)
  • ファイルの表示・編集を行います。
    コメントやクラスなどの要素ごとの色分けや、コードの逐次補完機能などがあります。

●ナビゲーションバー

180

  • 戻るボタン(Go Back)
  • 閲覧したファイル履歴から前のファイルへ戻ります。

  • 進むボタン(Go Forward)
  • 閲覧したファイル履歴から次のファイルへ進みます。

  • ファイルヒストリー・メニュー(File history menu)
  • 閲覧したファイル履歴をポップアップメニューで開きます。

  • ファンクション・メニュー(Function menu)
  • 表示しているファイル中のクラスやメソッドのポップアップメニューを開きます。

  • ブックマーク・メニュー(Bookmarks menu)
  • 設定したブックマークをポップアップメニューで開きます。

  • ブレイクポイント・メニュー(Breakpoints menu)
  • 設定したブレイクポイントをポップアップメニューで開きます。

  • クラスヒエラルキー・メニュー(Class Hierarchy menu)
  • クラスの階層をポップアップメニューで開きます。

  • インクルードファイル・メニュー(Included Files menu)
  • インクルードしているファイルをポップアップメニューで開きます。

  • カウンタパート・ボタン(Counterpart button)
  • 表示しているファイルや選択しているシンボルなどに対応するファイルを開きます。

  • ロック・ボタン(Lock button)
  • ファイル編集のロック/解除を行います。

0 CommentsPosted in 資料





bose_soundlink_revolve
Calendar
01 | 2010/02 | 03
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 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

bose_soundlink_revolve
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