デフォルトのソースコードをチェックしよう! (1/5)
作成:2011-03-08 10:07
更新:2011-03-08 10:20
更新:2011-03-08 10:20
■基本はmain.mから!
では、前回作成したプロジェクトのソースコードを見ながら、iphoneプログラムの構造を理解していくことにしましょう。まずは、main.mからです。これは、ファイル名からも想像がつくように、main関数が記述されたソースコードです。すなわち、アプリを実行すると、まずここにある処理が実行されることになります。
ここでは、最初に以下のような#import文が記述されていますね。
これは、Objective-Cにおけるメモリ管理に関するクラスです。Objective-Cではたくさんのオブジェクトが使われますが、これらは「使いっぱなし、作ったらそのまま放置」ではいけません。使い終わったらそれを解放するような処理をしておかないといけないのです。
新しいObjective-Cでは「ガベージコレクション」といってオブジェクトを自動的に回収し破棄するような仕組みが用意されていますが、残念ながらiphoneではこれは使われません。このため、オブジェクトをきちんと管理する必要があります。
オートリリースというのは、オブジェクトの管理の基本となるものです。これを最初に用意しておき、インスタンスを作成する際に、このオートリリースに組み込んでおいてやります。そうして、使い終わったところで最後にオートリリースのメソッドを呼び出してやると、登録されたオブジェクトをすべて開放してくれます。
ですので、クラスを利用するときは、まず「オートリリースを用意し、使い終わったら開放」という処理を書くのが基本なのですね。これが、そのためのものです。最初にNSAutoreleasePoolのインスタンスをこうして用意しておくのです。
GUIアプリケーションでは、メインループでイベントの処理をしたり、いろいろと複雑なことをしながらループを繰り返して動きます。これを一から作るのはちょっと不可能でしょう。UIKitのフレームワークに用意されているこの関数を呼び出すことで、そうした基本的なGUIアプリケーションの仕組みを使うメインループが実行される、というわけです。
これは、プログラムのメインループを起動するものですから、これの実行が完了するということは、プログラムが終了するということでもあります。つまり、プログラムを終了するまで、処理はここに戻ってきません。
[
――以上のように、main関数は短いけれどいろいろと重要なことが行われているのですね。ただし、これらはすべてGUIアプリケーションを起動し終了するための基本となるものですので、実際の開発においては、このコードを書き換えたりすることはまずありません。「main.mは、そういうものがあるとだけ覚えておけばいい」でしょう。
ただ、オートリリースの仕組みなどは、これから何度も登場しますので、その考え方とNSAutoreleasePoolの基本的な使い方ぐらいはあわせて覚えておくとよいでしょう。
ここでは、最初に以下のような#import文が記述されていますね。
#import <UIKit/UIKit.h>このUIKitというのが、iOS用のGUIなどを提供するフレームワークです。まずは、これを#importしておきます。これにより、UIKitのクラス(もちろん、Foundationも含めて)が利用可能となります。――続いて、main関数を記述します。
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];最初に記述されているのは、NSAutoreleasePoolというクラスのインスタンスを作成するための文です。このクラスは、「オートリリース」というものを管理するためのものです。
これは、Objective-Cにおけるメモリ管理に関するクラスです。Objective-Cではたくさんのオブジェクトが使われますが、これらは「使いっぱなし、作ったらそのまま放置」ではいけません。使い終わったらそれを解放するような処理をしておかないといけないのです。
新しいObjective-Cでは「ガベージコレクション」といってオブジェクトを自動的に回収し破棄するような仕組みが用意されていますが、残念ながらiphoneではこれは使われません。このため、オブジェクトをきちんと管理する必要があります。
オートリリースというのは、オブジェクトの管理の基本となるものです。これを最初に用意しておき、インスタンスを作成する際に、このオートリリースに組み込んでおいてやります。そうして、使い終わったところで最後にオートリリースのメソッドを呼び出してやると、登録されたオブジェクトをすべて開放してくれます。
ですので、クラスを利用するときは、まず「オートリリースを用意し、使い終わったら開放」という処理を書くのが基本なのですね。これが、そのためのものです。最初にNSAutoreleasePoolのインスタンスをこうして用意しておくのです。
int retVal = UIApplicationMain(argc, argv, nil, nil);このUIApplicationMainというのは、UIKitに用意されている関数です。これにより、UIKitのGUIを使ったアプリケーションのメイン処理が起動します。
GUIアプリケーションでは、メインループでイベントの処理をしたり、いろいろと複雑なことをしながらループを繰り返して動きます。これを一から作るのはちょっと不可能でしょう。UIKitのフレームワークに用意されているこの関数を呼び出すことで、そうした基本的なGUIアプリケーションの仕組みを使うメインループが実行される、というわけです。
これは、プログラムのメインループを起動するものですから、これの実行が完了するということは、プログラムが終了するということでもあります。つまり、プログラムを終了するまで、処理はここに戻ってきません。
[
pool release];メインループが終了して次に進む(つまりGUIアプリケーションの処理が完了する)と、最後にNSAutoreleasePoolインスタンスのreleaseを呼び出し、それからUIApplicationMainの返値をreturnしてプログラム終了となります。このreleaseが、NSAutoreleasePoolに登録されたオブジェクトを解放する処理です。
return retVal;
――以上のように、main関数は短いけれどいろいろと重要なことが行われているのですね。ただし、これらはすべてGUIアプリケーションを起動し終了するための基本となるものですので、実際の開発においては、このコードを書き換えたりすることはまずありません。「main.mは、そういうものがあるとだけ覚えておけばいい」でしょう。
ただ、オートリリースの仕組みなどは、これから何度も登場しますので、その考え方とNSAutoreleasePoolの基本的な使い方ぐらいはあわせて覚えておくとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※main.mのソースコード #import <UIKit/UIKit.h> int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; }
※関連コンテンツ
「初心者のためのiphone/ipadプログラミング入門」に戻る