libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

Objective-Cのプロジェクトを動かそう! (4/5)

作成:2011-02-06 16:05
更新:2011-11-13 17:17

■main関数を見てみよう!

では、main.mの中身をチェックしてみましょう。これを開くと、下のリスト欄に掲載されたようなソースコードが記述されていることがわかります。これはどういうものなのか、ざっと整理をしておきましょう。
#import <Foundation/Foundation.h>
これは、Foundationフレームワークのヘッダーファイルをインポートするためのものです。Objective-Cでは、基本的な機能はすべて「Foundation」というフレームワークとして用意されています。ですから、Objective-Cのプログラムを作成するときには、これをインポートしておくのが基本なのです。
int main (int argc, const char * argv[]) {
プログラムを実行したときに呼び出される「main」関数ですね。Objective-Cでも、C言語と同様、プログラムを起動すると最初にmain関数が呼び出され実行されます。ですから、ここに必要な処理を書いておけばいいのです。
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
これは「オートリリースプール」と呼ばれる、オブジェクト管理のための仕組みを利用するための文です。とりあえず、このあたりはオブジェクト管理について勉強するまでは深く考える必要はありません。
// insert code here...
NSLog(@"Hello, World!");
これが、今回実行している内容です。この// insert code here...の下に、実行したい処理を書けばいいわけですね。

今回は「NSLog」という関数を利用しています。これはObjective-CFoundationフレームワークに用意されているもので、ログを出力するためのものです。

今回は、@"Hello, World!"というようにしてテキストを出力しています。実は、これはCのテキストリテラルとは違います。これは「Objective-Cのテキストリテラル」なのです。Objective-Cでは、テキストは「オブジェクト」として扱われ、char配列のようなCのテキストとは全く別物なのです。そこで、Objective-Cでテキストを書くときには、このように冒頭に@記号をつけた形で「これはObjective-Cのテキストですよ」ということがわかるように記述します。
[pool drain];
これは、先ほど登場したオートリリースプールというものでオブジェクトを解放するための処理です。これもオブジェクト管理がわかるまでは、深く考える必要はありません。

――とりあえず、全体の主な流れはこれでわかりました。まぁ、中には「後回し!」とした部分もありますが、必要最低限のことがわかれば、とりあえずプログラミングの勉強は開始できますから、それでよしとしましょう。

では、ウインドウ左上にある「Run」ボタンを押して、プログラムを実行してみましょう。すると、驚くべき結果になります。なんと、Xcode 4.2では、エラーになって動かないのです!

(※4.2以前の場合は、そのまま動くはずです。4.2で、先ほどの説明通りにプロジェクトを作った場合、エラーになります)

これは、あなたが悪いのでもなんでもありません。実は、テンプレートで生成されるソースコードは、Xcode 4.2で使われているObjective-Cの「ARC」という機能を使ったプロジェクトでは動かないのです。

ARCの説明は次にするとして、とりあえず動くようにしましょう。下のリストで、★マークのついている2つの文をコメントアウトしてください(C言語と同様、冒頭に//をつけるとコメント文になります)。

これで、再びRunを実行しましょう。コンソールに「Hello, World!」と出力されましたか?これが作成されたプログラムの実行結果です。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※MyObjCApp.mの内容

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool =  [[NSAutoreleasePool alloc] init]; // ★

    // insert code here...
    NSLog(@"Hello, World!");

    [pool drain]; // ★

    return 0;
}

※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る