2章 Objective-C基礎講座

iPhone SDKプログラミング大全の2章を読みながら。

C言語はある程度知っているつもりなので、Objective-Cの特徴とかを。

  • 拡張子は .m
  • C++も使用できる

その場合、拡張子は .mmになる。Objective-C++と呼ばれる拡張らしい。

iPhoneで使えるのは、Objective-C 2.0相当である。が、ガベージコレクションは使えないらしい。Mac OS Xだと、ガベージコレクションを使える。

まぁつまりはメモリ処理は自分でやれという話。

メソッド

// 引数なしメソッドの例
NSString* string;
string = @"A String of Objective-C";

int length;
length = [string length];

NSStringクラスのインスタンスであるstringオブジェクトのlengthメソッドを呼び出してる様子。とりあえず、この変数のネーミングセンスはどうかと思うけど。。

  • 宣言の際は、クラス名の末尾に「*」をつける
  • インスタンス生成は「@」をつける
  • メソッドは『[オブジェクト名 メソッド名]』という書き方(引数なし)

みたいな感じ。


引数ありのメソッドは、

unichar uc;
uc = [string characterAtIndex:0];

のようになる。

  • 『[オブジェクト名 メソッド名:引数]』という感じ。


その他、

NSRange range;
range = [string rangeOfString:@"Objective-C"
                      options:NSCaseInsensitiveSearch];

「ラベル」というものがある。「options」がラベルに該当する。


メソッドの宣言は、

- (NSRange)rangOfString:(NSString*)string
     options:(NSStringCompareOptions)mask
  • インスタンスメソッドは「-(ハイフン)」で始まる
  • (NSRange) は戻り値の型
  • rangOfString はメソッド名
  • 「(NSString*)」は第一引数の型、「string」は第一引数
  • 「options」は第二引数のラベル
  • 「(NSStringCompareOptions)」は第二引数の型、「mask」は第二引数
  • ちなみにクラスメソッドは「+(プラス)」で宣言が始まる

クラスの宣言と実装

// Person.h というヘッダファイルを作成

# import <UIKit/UIKit.h>

@interface Person : NSObject
{
    int       age;
    NSString* firstName;
    NSString* lastName;
}

- (BOOL)isAdult;

@end
  • 「#import」でヘッダファイルを読み込む。C言語と違い、同じファイルを2回以上読み込む恐れが無いらしい。
  • 最初にインスタンス変数
  • 次にメソッド
  • @interface で始まり、 @end で終わる。

NSObjectクラスを継承したPersonクラスってとこか。
NSObjectは、Cocoa Touchフレームワークのルートオブジェクトとなるクラスなので、特に継承元のクラスが無い場合は、NSObjectを継承するといいらしい。



次に、クラスの実装。

// Person.m というクラスファイルを作成

# import "Person.h"

@implementation Person

-(BOOL)isAdult
{
    return age > 19;
}

@end
  • ヘッダファイルをimportする
  • @implementation で始まり、 @end で終わる。
  • メソッドを実装する


なんかObjective-Cだけ、ってのも飽きてきた。あとはつまづいた時にでも詳解 Objective-C 2.0を読めばいいか。

ただ、一通りこの2章でObjective-Cを結構カバーしてるような気がする。

メモリ管理

これもObjective-C独特のお作法みたいなのがある。後で。

3章 プログラミングガイド システム編

パス。
Foundationについての説明。