iPhone開発入門
開発環境の準備
iPhoneアプリの開発ツール「iPhone SDK」は無料で入手できます。しかし、サポートしている環境はMac OS Xだけで、さらにiPad用アプリも開発できる最新版からはOSもSnow Leopardのみの対応となりました。
iPhone SDK 3.2は、iPhone Dev Centerに登録・ログインして入手します。ダウンロード完了後、Macにインストールしてください。SDKには以下が含まれています。
- IDEのXcode
- GUI構築ツールのInterface Builder
- iPhoneアプリをMac上で試せる iPhone(iPad)シミュレータ
- フレームワーク・ライブラリ
- ドキュメント
- その他ツール
なおXcode等のツールは/Applicationsディレクトリではなく、/Developer/Applicationsディレクトリにインストールされるので注意してください。
iPhone SDKを使うと、Mac上でアプリを作りiPhoneシミュレータでアプリの動作確認まで行えます。今回の記事はiPhoneシミュレータ上での動作までの解説になりますので、できたアプリを自分のiPhoneにインストールしたり、iTunes Storeで販売する際は、有料のiPhone Developer Programに登録し、行ってください。iPhone Developer ProgramについてはiPhone Developer Programページを参照ください。
開発言語Objective-Cについて
iPhoneアプリはObjective-Cという言語で開発します。Objective-Cをひとことで言うと「C言語の上にSmalltalk風のオブジェクト指向機能を乗せた言語」と言えます。今回作成するコードの一部の示します。
- (UITableViewCell *)tableView:(UITableView *)aTableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Talks";
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
Talk *talk = [talks objectAtIndex:indexPath.row];
cell.textLabel.text = talk.text;
return cell;
}
if文や中括弧、ポインターを表す * などC言語の部分もありますが、[]の中はC言語らしくないですし、文字列 "・・・" の前に@が付いていたり最初の行はCの関数定義とは違いますね。このようにC言語でない部分がObjective-C固有の記述で、残りは通常のC言語です。
簡単にObjective-C固有の機能を解説すると
- [オブジェクト メソッド] はオブジェクトの持つメソッドを呼び出します。
- 引数が1つあるメソッド呼び出しは [オブジェクト メソッド:引数] のように、
- 引数が2つ以上ある場合は [オブジェクト メソッド:引数1 セレクター1:引数2 セレクター2:引数3 ...] のようになります。
- インスタンスメソッドの定義は上のコードの1行目のように - から始まり、(戻り値の型)メソッド名:(引数1の型)仮引数1 セレクター1:(引数2の型)仮引数2 ... のようになります。
- また、クラスメソッドの定義は + から始めます。
- @から始まる文字列はObjective-Cの文字列(NSStringクラスのインスタンス)になります。
- オブジェクトはすべてC言語のポインターで扱われます。
クラスの定義は公開するクラスの仕様を記述する@interfaceと実装の@implementationに分かれ、通常@interfaceを .hファイルに書き、クラスを利用するコードで参照(#import)できるようにします。実装は .mファイルに書きます。
以下は今回作るアプリ内のTalkクラスのコードです。
#import <Foundation/Foundation.h>
@interface Talk : NSObject {
NSString *text;
NSDate *createdAt;
}
@property (nonatomic, retain) NSString *text;
@property (nonatomic, retain) NSDate *createdAt;
@end
- @interfaceの次がここで定義するクラスの名前で : の次は親クラス名になります、NSObjectはObjective-Cの全クラスの親クラスです
- {} の中にはこのクラスが持つインスタンス変数を定義します。ここでは日時クラスNSdateのcreatedAtと文字列クラスNSStringのtext変数を定義しています。
- @propertyはインスタンス変数を外部から参照できるgetter/setterを宣言しています。
#import "Talk.h"
@implementation Talk
@synthesize text;
@synthesize createdAt;
- (void) dealloc {
[text release];
[createdAt release];
[super dealloc];
}
@end
- @synthesizeはgetter/setterの実装を作る宣言です。
- このコードではdeallocというインスタンスメソッドを定義しています。
- deallocメソッドはインスタンスの解放時に呼び出されるメソッドです。
- superは親クラスを現します。
iPhone用のObjective-Cにはガーベッジコレクション(GC)が無く、オブジェクトの生成・解放はプログラムに明示する必要があります。この記事ではオブジェクトの生成・解放の詳細には触れませんが、本格的なアプリを作る際にはiPhone SDKのドキュメントや書籍を参考にしてください。
