トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

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.