Objective-C 基礎
せっかくMacを使ってるんだからって事で、Objective-C をちょっと触ってみた。
以下、簡単な書き方メモ。
今回は、objc-1.m ファイルに全て書く。 .m が Objective-C の拡張子。
まず、インターフェースを書く。 C++でいうクラス定義みたいなもの。
#import
#import
@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
#import
cc -o hoge objc-1.m -framework Foundation
cc -o hoge objc-1.m -lobjc
以上、簡単なメモでした。