iPhone SDKプログラミング大全の2章を読みながら。
C言語はある程度知っているつもりなので、Objective-Cの特徴とかを。
- 拡張子は .m
- C++も使用できる
その場合、拡張子は .mmになる。Objective-C++と呼ばれる拡張らしい。
- Objective-C 2.0
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についての説明。