6月 082008
 

せっかくMacを使ってるんだからって事で、Objective-C をちょっと触ってみた。

以下、簡単な書き方メモ。

今回は、objc-1.m ファイルに全て書く。
.m が Objective-C の拡張子。

まず、インターフェースを書く。
C++でいうクラス定義みたいなもの。

#import <stdio.h>
#import <foundation/NSObject.h>
@interface Hoge : NSObject
{
	int m_x;
	int m_y;
}
-(id)init_x:(int)x _y:(int)y;
-(int)getX;
-(int)getY;
-(void)dealloc;
@end

#import でヘッダをインポート。
init_x:_y が初期化。初期化は、init で始まるメソッド名を書くのがルールらしい。
引数をつける場合は、: でつなぐ。 :( int)x が第一引数。 _y:(int)y が第2引数。
_y は省略することが出来る。_yは、引数が何を表しているのかを表す。
(int) が引数の型である。
id ってのは、オブジェクトを格納するための特別な型らしい。
Objective-C では、メッセージという考え方が基本のようなので、そのIDって感じ・・・?

インターフェースを書いたら、次にインプリメンテイション(実装)を書く。

@implementation  Hoge
-(id)init_x:(int)x _y:(int)y
{
	self =[super init];
	if( self != nil)
   {
		m_x = x;
		m_y = y;
   }
	return self;
}
-(int)getX
{
	return m_x;
}
-(int)getY
{
	return m_y;
}
-(void)dealloc
{
   [super dealloc];
}
@end

self は、インスタンスオブジェクト自体。まぁ名前の通り。
[super init] は、親クラスのinitメソッド呼び出し。
C++で書くとすると・・・NSObject::init(); かな?

最後に当然だけど、main も書く。

int main(int argc, const char * argv[])
{
	id hoge =[[Hoge alloc] init_x:5 _y:10];
	printf("x:%d\n",[hoge getX]);
	printf("y:%d\n",[hoge getY]);
   [hoge dealloc];
	return0;
}

id hoge が、生成されたインスタンスを受け取る。
[[Hoge alloc] init_x:5 _y:10] が初期化。
C++ で書くとたぶん Hoge::alloc()->init_x( 5, 10 ); だと思う。。
[hoge getX] がメソッド呼び出し。
C++ で書くと hoge->getX();

コンパイルは、以下のように書く。
Foundationというフレームワークを使っているので、指定してやる必要あり。

    cc -o hoge objc-1.m -framework Foundation

実行すると

    x:5
    y:10

と表示されて終わります。

ちなみに NSObject ではなく Object を使用した場合の変更点は、以下の通り。

#import <foundation/NSObject.h>
#import <objc/Object.h>
cc -o hoge objc-1.m -framework Foundation
cc -o hoge objc-1.m -lobjc

以上、簡単なメモでした。

関連エントリー:

Objective-C + NSObject

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> <pre lang="" line="" escaped="" highlight="">