viva Cocoa Objective-C 入門 第2章 Xcode を使ってみましょう
ホーム メール
 
目次 < 前ページ 次ページ >

Objective-C によるコマンドラインツールの作成

 次にObjective-Cでコーディングされたプログラムを作成します。とは言っても今回もHello, World!と表示されるだけです。そして今回もまたプロジェクトのヒナ型を使って、一行もコーディングすることなくObjective-Cによるコマンドラインツールを作ります。helloCプロジェクトウィンドウがまだ開いている場合はクローズボタンで閉じてください。コンソールウィンドウも同時に閉じられます。

プロジェクトの作成

 次の手順に従って新しいプロジェクトを作成します。

  1. 「ファイル」メニューから「新規プロジェクト...」を選びます。
  2. 新規プロジェクトウィンドウの左のペインでMac OS XのApplicationを選び、右のペインでCommand Line Toolを選びます。そしてTypeポップアップメニューで“Foundation”を選び、「選択...」ボタンをクリックします。

    【Xcode 3.1の場合】

     左ペインでMac OS XのCommand Line Utilityを、右ペインで“Foundation Tool”を選び、「選択...」ボタンをクリックします。

  3. 次の保存シートで名前を「helloObjC」にしてください。保存場所は前節でデスクトップに作成したObjCフォルダかあなたが保存場所として選んだところが良いでしょう。
  4. 「保存」をクリックすると新たなプロジェクトウィンドウが開きます。

    図 helloObjCプロジェクトウィンドウ

■構成ファイルの説明

 グループとファイルペインの一番上のプロジェクト名を選択すると右側のファイル名ペインにプロジェクトに含まれているすべてのファイルが表示されることはどのプロジェクトでも同じです。今回も上から順番に説明していきます。

1. Foundation.framework
前章で説明したCocoaフレームワークの基礎的な部分を担当するAPIの集合体です。
2. helloObjC
実際の実行ファイルです。まだビルドされていないので赤字で表示されています。
3. helloObjC.1
Unix man(マニュアル)用テキストファイルです。
4. helloObjC.m
Objective-Cで書かれたコードファイルです。このファイルをコンパイルすることによって実行ファイルが出来上がります。Objective-Cで書かれたコードファイルには「m」という拡張子がつきます。
5. helloObjC _Prefix.pch
コンパイル開始時にしなければならいことを書くファイルです。テンプレートではFoundationフレームワークの読み込みを行うように指示されているだけです。その他にもコンパイル開始時に指示したいことをこのファイルに書くことができます。

コードを見てみましょう

 helloObjC.mのコードを見てみましょう。helloObjC.mをダブルクリックして別ウィンドウにhelloObjdC.mのコードを表示させるか、helloObjC.mを選択だけしてプロジェクトウィンドウの下部にhelloObjC.mのコードが表示させます。短いコードを確認するにはプロジェクトウィンドウの下部に表示させるほうが便利かもしれません。

■ main.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; }

■コード説明

●1行目
 C言語では#includeでヘッダファイルを読み込んでいましたが、Objective-Cでは#importでヘッダファイル(フレームワーク)を読み込みます。#importはヘッダファイルの2重読み込みが行われないことが保証されています。C言語では、#includeと記述するたびにヘッダファイルが読み込まれます。うっかりと同じヘッダファイルを読み込んでしまった場合は関数などが2重定義されていることになりエラーになります。Objective-Cでは、このような心配をする必要がなくなったわけです。
●4行目
	NSAutoreleasePool * pool
 “自動解放プール”のポインタpoolを宣言しています。この自動解放プールはメモリ管理に使われます。メモリ管理については6章で詳しく説明いたします。
	[[NSAutoreleasePool alloc] init];
 この記述方法に慣れるまでは相当に違和感を覚えることだと思います。この大括弧(角括弧)で囲まれた部分は“メッセージ式”と呼ばれるObjective-C特有の記述方法です。詳しくは後ほど説明いたしますが上記の式は[NSAutoreleasePool alloc]というメッセージ式の戻り値に対して再度“init”というメッセージを送っています。メッセージ式はこのように“ネスト”(入れ子に)することができます。このメモリ自動解放プールには将来解放して欲しいオブジェクトが登録されます。“解放”とはそのオブジェクトを破棄して占有していたメモリ領域を解放すること(再び他の用途で使えるようにすること)を意味しています。しかし現段階では、まだ“オブジェクト”の説明をしていません。この部分の説明が理解できなくて当然です。気にせず先に進んでください。
●7行目
	NSLog(@"Hello, World!");
 このコードは見ていただいて分かるとおりC言語の関数のかたちをしています。Foundationフレームワークのなかで定義されているObjective-Cの関数です。  この関数の機能はC言語のprintfとほぼ同じです。C言語と同じ変換指定子を使うことができます。文字列の前に@マークが付いていますが、これはその文字列がC言語のchar型配列ではなくObjective-Cのオブジェクトであることを表しています。とは言っても、ここでもやはり「オブジェクト」が理解できていなくて当然です。先ほどと同じく気にせずに先に進んでください。なおこの@マークはコードのなかでCとObjective-Cを区別するために使われます。前述の[ ] (角括弧)と@マークが出てくれば、そこはObjective-Cでコーディングされていると思ってください。
●8行目
	[pool drain];
 4行目で作成したメモリ自動解放プールに登録されたオブジェクトを解放しています。

実行

 では「実行」メニューから「コンソール」を選んでコンソールウィンドウを表示し、「ビルドと実行」ボタンをクリックしてください。NSLogはprintfと違い「Hello, World!」の前にタイムスタンプやツール名などが表示されます。

図コンソール3

 コンソール画面が文字で一杯になって見にくくなってきた場合はツールバー右端の“ログを消去”をクリックしてください。コンソール画面が白紙に戻ります。
 確認が終わりましたらプロジェクトウィンドウを閉じてください。プロジェクトウィンドウを閉じるとコンソールウィンドウも同時に閉じます。逆にコンソールウィンドウを閉じてもプロジェクトウィンドウが一緒に閉じることはありません。



目次 < 前ページ 次ページ >


Copyright 2006 - 2010 viva Cocoa. All Rights Reserved.