せっかく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
以上、簡単なメモでした。






