BLOG

Objective-Cのクラスとメソッドの宣言・使い方

こんにちは、KKです。

今回、Objective-Cのクラスとメソッドの宣言、使い方について学んだので紹介しようと思います。

紹介する内容は以下の通りです。

・クラス、インスタンス変数の宣言について
・インスタンスメソッドの宣言について
・インスタンスメソッドの実装について
・クラスのインスタンス化、インスタンスメソッドの呼び出しについて

クラス、インスタンス変数について

まず、クラスとインスタンス変数、メソッドの宣言の雛形を紹介します。

@interface クラス名 : 親クラス {
インスタンス変数
}
メソッド宣言
@end

クラスの宣言は、@interface から始まり @end で終わり、この間に宣言した変数やメソッド等がクラスに紐付けられます。

他のプログラミング言語を学んでからだと、クラスの宣言に戸惑ったり間違ったりすることが多々あるかもしれませんね…。

親クラスは、継承するクラスを宣言します。指定して継承するクラスがない場合は、NSObjectを継承しましょう。

クラスに変数を宣言する時は、{ } の間に変数を宣言します。クラスに紐付けされた変数を インスタンス変数 と言います。

インスタンス変数を宣言しない場合は、、{ } の省略してもいいです。

実際にソースコードで書くと下記の通りになります。

#import <objc/Object.h>

@interface Point : NSObject {
  int x; 
  int y;
}
@end

インスタンスメソッドについて

ここではメソッドの宣言のみですので、メソッドの中の処理は別で用意が必要になります。

では、インスタンスメソッドの宣言の雛形を紹介します。

– (戻り値型) メソッド名 : (第1仮引数型)第1仮引数名 第2仮引数ラベル:(第2仮引数型)第2仮引数名 … ;

始めに、- (マイナス)記号を書きます。

通常のメソッドは、- 記号で問題ないですが、+ (プラス)記号も用意されています。- 記号のメソッドがインスタンスメソッドと呼ばれ、+ 記号のメソッドはクラスメソッドと呼ばれます。

戻り値型は、() の間に返す型を定義します。メソッドから呼び出し元へ返す値がない場合は、 void を定義し返す値がある場合は返す値に合う型を定義しましょう。

仮引数は、() の間に受け取る型を定義し名前を定義します。

第2仮引数からはラベルが定義可能でキーワード、説明に用いられます。通常はラベルも定義しますが、省略も可能です。

実際にソースコードで書くと下記の通りになります。

#import <objc/Object.h>

@interface Point : NSObject {
  int x;
  int y;
}
- (void)setPoint:(int)ptx py:(int)pty;
- (int)getX;
- (int)getY;
@end

インスタンスメソッドの実装について

メソッドの宣言が完了しましたので、メソッドの処理を実装する雛形を紹介します。

@implementation クラス名
メソッドの定義
@end

クラスで宣言したメソッドの処理を実装するには、@implementation から始まり @end で終わり、その間にメソッドの処理を実装します。

実際にソースコードで書くと下記の通りになります。

@implementation Point
- (void)setPoint:(int)ptx py:(int)pty {
  x = ptx;
  y = pty;
}
- (int)getX {
  return x;
}
- (int)getY {
  return y;
}
@end

クラスのインスタンス化、インスタンスメソッドの呼び出しについて

宣言したクラスやインスタンスメソッドをどのように呼び出すかは以下のようになります。

クラスのインスタンス化
id 変数名 = [クラス alloc];

id型は、オブジェクトを表す汎用型であらゆるオブジェクトは id 型の変数に保存すことができます。

allocは、クラスをメモリの何処かにコピーしてインスタンスを作るメソッドです。

インスタンスメソッドの呼び出し
id 変数名 = [クラス alloc];
[変数名 メソッド];
または
[[クラス alloc] メソッド]

クラスのインスタンス化や宣言したメソッド等の呼び出しする時は、[ ] を利用します。

実際にソースコードで書くと下記の通りになります。

id point1 = [Point alloc];
id point2 = [Point alloc];

[point1 setPoint:16 int:32];
[point2 setPoint:256 int:128];

NSLog(@"point1:X = %d, Y = %d\n", [point1 getX] , [point1 getY]);
NSLog(@"point2:X = %d, Y = %d\n", [point2 getX] , [point2 getY]);

以上で、クラス・変数・メソッドの宣言と使い方でした。

BLOGトップへ戻る