SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

iPhone+Ruby on Rails連携テクニック

iPhoneとRuby on Railsを超簡単に連携する ObjectiveResource
- iPhone編


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クラスのコードです。

Talk.h
#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を宣言しています。
Talk.m
#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のドキュメントや書籍を参考にしてください。

次のページ
iPhoneアプリの作成 1

この記事は参考になりましたか?

iPhone+Ruby on Rails連携テクニック連載記事一覧
この記事の著者

吉田裕美(ヨシダユウミ)

有限会社 EY-Office 取締役CADのベンチャー企業でCADのコア部分や図面管理システムなどの開発に従事した後、独立しJava,Ruby,PerlでWebアプリを中心に開発してきた。現在は殆どの開発はRuby on Rails。ここ数年はソフトウェアエンジニアの教育に興味をもち、従来の知識偏重な教育ではなく現実の問題を解決できるエンジニアを育てる教育に注力している。またLisp等に関心...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5126 2010/04/22 15:50

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー