Objective-c クラスとメソッド

○クラスリファレンスを見たときの注意点


クラス・メソッド(+)と、
インスタンス・メソッド(ー)の二種類ある。


ヘッダ・ファイル(.h)と、
ソースコード・ファイル(.m)を作成する。

だから、こんなイメージで作成してく。

#import < ヘッダファイル名>
@interface クラス名 : スーパークラス名
{
    インスタンス変数の宣言;
}

+ (戻り値の型) クラス・メソッド
-(戻り値の型)インスタンス・メソッド


実際のサンプルコード(ヘッダファイル)

// 利用するクラスのヘッダ・ファイルの読み込み
#import <Foundation/Foundation.h>

// クラスの宣言
@interface Ball : NSObject
{
    // インスタンス変数の宣言
    float size; // 大きさ
}

// メソッドの宣言
- (float) size;
// 引数はコロンでつなげる
- (void) setSize: (float)newSize;

@end


実際のサンプルコード(ソースコード・ファイル)

// ヘッダファイルの読み込み
#import "Ball.h"

// クラスの継承
@implementation Ball

// sizeメソッドの実装
- (float) size
{
    return size;
}

// setSizeメソッドの実装
-(void)setSize : (float) newSize
{
    size = newSize;
}

@end

ヘッダ・ファイルでは宣言しなかったメソッドを宣言しても構わない。
このようなメソッドは、クラスやインスタンスのメソッドとしては呼び出すことはできないので、
内部処理的なメソッドとして利用できる。
javaだと、内部クラス的役割ということだろか。

この場合は、型チェックのために、@implementationよりも前にメソッドを宣言しておくとよい。


実際にこのクラスを使う場合

// Ballクラスのインスタンスを生成して初期化する
Ball *myBall = [[Ball alloc] init];

// sizeの設定
[myBall setSize: 10.0];

// sizeの取得
float myBallSize = [myBall size];

// 取得した値の確認
NSLog (@"myBallSize = %f", myBallSize);

// インスタンスを解放
[myBall release];

昨日と今日で学んだことが総動員されていることがわかる。
また、javaでいうメンバ変数の代わりとして、プロパティという概念を使うらしい。
いろんな違いを意識しながら学ばないととてもついていけないかも。

// プロパティの宣言
// @property ( オプション指定 ) データ型 プロパティ名;
@property float size;

// プロパティの実装指示
// @synthesize プロパティ名
@synthesize size;

うん、全然違う!