2012年6月20日水曜日

Objective-C とりあえずコンソールアプリ

iOS のプログラミングを本格的に始めました。Objective-C の普通のプログラムから初めてiPhone のUIKitへ進むべく始めましたが, C言語からC++, Javaへ移ったときと同じくらいわからない衝撃がありました。

少しずつレベルアップを目指しつつ勉強用メモとして残しておきます。

まず Mac OS X のコンソールアプリケーションを作ってみる
(Objective-Cのクラスを利用する)

 環境 :  Mac OS X 10.7  Lion
 XCode : 4.3

※ここでいきなりですが, Objective-Cには, GCがないといわれていましたが,  OS X  のいつごろからかついています。iOS は 5の段階ではまだないようです。

もうひとつ ARCというのがあります Automatic Release Connection  というやつですが
変数を扱うときに, retain - release というセットをいれて, インスタンスの参照をカウントしていましたが ->  これの説明は別の機会に。

iPhoneの開発本などを買って( ちょっと古いやつとか ) サンプルを入力してはい、Buildしようとしたら,  [tmp release]  で警告  dealloc  なんてないぜとかいうのはこの ARCのおかげです。iOS5 から標準でこの ARCがついたみたいです。コンパイラ設定から外せますが。

早速コンソールアプリを作ってみましょう。

●まず Hello World!


XCode  を開いて, "Create Project" -> Mac OS X -> Application -> Command Line Toolを 選択します。


いろいろ名前を入れるところがでてきます。

Product Name  :  いわゆるプロジェクトの名前 ここではConsoleTestとしました
Company Identifier :  Javaでいうトップのnamespace 自分のURLとかを逆順に入れておく
           私の場合 com.atmarkplant かな
Type                  :  Foundation

チェックを入れる  Use Automatic Reference Counting


このプロジェクトのフォルダを作成する場所を選びます。 別にどこでもいいです。


プロジェクトを作成すると, 早速 Hello World!のプログラムが完成しているようです。
main.m には すでにmain 関数が書いてあります。

左上にある Run という→のボタンを押すとBuild と実行です。


実行すると, 右下の方に実行結果が表示されます。これはNSLog の効果です。

プログラムはぱっと見た感じ Cです。ただのCです。 もちろんこのままC like に書き続けることもできます。


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        NSLog(@"Hello World!");
    }
    return 0;
}



ですが, Objective-Cのクラスを書きます。

● クラスを書く

ConsoleTest フォルダを右クリック -> New File -> Mac OS X -> Objective-C Class


を選択します。名前は TestClass とでもしておきます。
2つのファイルが作成されました。

TestClass.m TestClass.h です。
クラスを作成するとこの 2つのファイルが作成されます。

TestClass.h   :  クラス定義用
TestClass.m   :  クラスの実装用

とざっくりいうとこんな感じです。今回は中身の説明はしません。
早速必要なことを書いていきます。

TestClass.h

#import <Foundation/Foundation.h>

@interface TestClass : NSObject
{
    NSString *str;
    int index;
    BOOL testBool;
}
@property (nonatomic) NSString *str;
@property (readonly) int index;
@property BOOL testBool;
@end


TestClass.m

#import "TestClass.h"

@implementation TestClass
@synthesize str;
@synthesize index;
@synthesize testBool;

-(id)init
{
    if ( self = [super init] )
    {
        str = [[NSString alloc]initWithString:@"Mayuyu"];
        index = 2;
        testBool = YES;
    }
    return self;
}

@end


これを利用するため main.mを書き換えましょう。


#import <Foundation/Foundation.h>
#import "TestClass.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        TestClass *tmp;
        tmp = [[TestClass alloc] init];
        
        NSLog(@"str %@", tmp.str);
        
        // [tmp release];
        
    }
    return 0;
}


release はいりません。だってARC がついているから。

これで実行すると, Mayuyu というのが表示されるはずです。


0 件のコメント:

コメントを投稿