読者です 読者をやめる 読者になる 読者になる

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

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