ObjectiveCでのクラスの基礎_mac
ObjectiveCでのクラスの基礎
CとObjectiveCを混合して使えるようにするため、拡張子を「mm」とします。
C言語のようにヘッダファイルは拡張子「h」のものを作成します。
コメントの表記
C言語と同じく1行コメントの場合は
// 何かコメント
か、複数行の場合は
/* 複数行コメント */
のように記述します。
簡単な足し算を行うクラス
foo.mm / foo.hという実装部とヘッダ部のファイルを作成するものとします。ObjectiveCのクラスひな形の覚え書きです。
「foo.h」の記述
ヘッダ部の宣言です。「foo.h」というファイルを作成するとします。
#import <Cocoa/Cocoa.h> @interface Foo : NSObject { @private float m_a, m_b; } /** * 初期化処理 */ - (id)init; /** * 破棄処理 */ - (void)dealloc; /** * 足し算処理 */ - (float)add:(float)a b:(float)b; @end
Cocoaの機能をしますので、
#import <Cocoa/Cocoa.h>
をはじめに記載します。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関数が呼ばれます。
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.