!!!ObjectiveCでのクラスの基礎 CとObjectiveCを混合して使えるようにするため、拡張子を「mm」とします。 C言語のようにヘッダファイルは拡張子「h」のものを作成します。 !!コメントの表記 C言語と同じく1行コメントの場合は // 何かコメント か、複数行の場合は /* 複数行コメント */ のように記述します。 !!簡単な足し算を行うクラス foo.mm / foo.hという実装部とヘッダ部のファイルを作成するものとします。 ObjectiveCのクラスひな形の覚え書きです。 !「foo.h」の記述 ヘッダ部の宣言です。「foo.h」というファイルを作成するとします。 #import @interface Foo : NSObject { @private float m_a, m_b; } /** * 初期化処理 */ - (id)init; /** * 破棄処理 */ - (void)dealloc; /** * 足し算処理 */ - (float)add:(float)a b:(float)b; @end Cocoaの機能をしますので、 #import をはじめに記載します。 C言語でいう「#include」相当です。 !クラスの宣言部 @interface Foo : NSObject { @private float m_a, m_b; } は、クラスの内部メンバの記載。クラス名はこの場合は「Foo」になります。 NSObjectを派生しています。 「@protected」下は、派生クラスにて使用できるメンバ。指定のない場合は@protectedになります。 「@private」下は、このクラス内でしか使用できないメンバ変数。 「@public」下は、他からアクセスできるメンバ変数。 括弧内は変数のみを列挙します。 関数は括弧の外に出します。 !関数宣言 - (id)init; - (void)dealloc; - (float)add:(float)a b:(float)b; の列挙は関数宣言になります。 initはCでのコンストラクタ相当、deallocはデストラクタ相当です。 関数は「-」から記載します。 (id)はクラスのポインタ型相当(ポインタ隠蔽のため)。 init関数は、戻り値が(id)で引数のない関数の宣言です。 dealloc関数は、戻り値なし(void)で引数のない関数の宣言です。 add関数は、第一引数がfloat型(「a」として指定)、第二引数がfloat型(「b」として指定)、戻り値がfloatの関数の宣言です。 !ヘッダ部の閉じ @end を記載。 !「foo.mm」の記述 実体部を「foo.mm」として記載します。 #import "foo.h" @implementation Foo /** * 初期化処理(コンストラクタ相当) */ - (id)init { if(self == [super init]) { // 初期化が成功したので初期化処理を行う m_a = 0.0; m_b = 0.0; } return self; } /** * 破棄処理(デストラクタ相当) */ - (void)dealloc { [super dealloc]; } /** * 足し算処理 */ - (float)add:(float)a b:(float)b { m_a = a; m_b = b; return (a + b); } !コンストラクタ相当 クラスの作成時の初期化処理は、init関数にて記載。 - (id)init { if(self == [super init]) { // 初期化が成功したので初期化処理を行う m_a = 0.0; m_b = 0.0; } return self; } 親クラス(NSObject)が「super」にて定義されているので[super init]として、自身である「self」とイコールの場合はクラス生成が成功したことになります。 戻り値はselfを返します。失敗した場合はnilを返すようにします。 !デストラクタ相当 - (void)dealloc { [super dealloc]; } 親クラスのデストラクタを[super dealloc]にてにて解放。別途解放するものがあればこの関数内にて破棄処理します。 !作成したクラスの生成と関数アクセス Cocoaのクラスを呼ぶ場合は、呼び出し元のソースは拡張子が「m」または「mm」である必要があります。 #import "foo.h" クラスヘッダの指定です。C言語の「#include」相当。#includeの指定でも同じになります。 Foo *pC; float val; // クラスの作成 pC = [[Foo alloc]init]; // メンバ変数を呼び出し val = [pC add:5 b:10]; // クラスの破棄 [pC dealloc]; 作成したクラス「Foo」を pC = [[Foo alloc]init]; のように生成します。「alloc」は派生元のNSObjectでの関数、initはコンストラクタ相当です。 val = [pC add:5 b:10]; にて、作成したクラスpCの関数である「add」を第一引数5、第二引数10として指定します。 この「add」関数は足し算を行うものですで、戻り値としてa + bの結果を返します。 この場合、valにはfloat型の15が返ります。 [pC dealloc]; にて生成したクラスを破棄します。dealloc関数が呼ばれます。 [pC release]; としてもデストラクタとしてdealloc関数が呼ばれます。