セレクタ
- Objective-C コンパイラは、メソッドを特定する名前をコンパイル時に内部表現に変換します。 この、メソッドの内部表現をセレクタと呼び、メッセージの送受信の裏側では、このセレクタがやり取りされています。
- メソッドを特定するための内部表現についてはコンパイラに依存する問題であり、開発者が知るべき範囲ではありません。 開発者にとって重要なのは、このセレクタを SEL 型として扱うことができる。
- メソッドを特定するセレクタは @selector コンパイラディレクティブを用いて取得することができます。@selector ( method )
- 指定したメソッドの名前が存在するかどうかは、メソッドを呼び出すときに、実行時に判定されるため、コンパイル時には評価されない。
- ルートクラスがセレクタからメソッドを呼び出す機能を提供する。Object クラスには、SEL 型の値を受け取る perform メソッドが宣言されています。 このメソッドは、引数で受け取ったセレクタが特定するメソッドを実行します。
- JavaScriptの関数オブジェクトや.NETのデリゲートのイメージ
NSArray
1 2 3 4 5 6 7 |
// 古い書き方 NSArray *oldArr = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; NSMutableArray *oldMutableArr = [NSMutableArray arrayWithObjects:@"value4", @"value5", @"value6", nil]; // 新しい書き方 NSArray *newArr = @[@"value1", @"value2", @"value3"]; NSMutableArray *newMutableArr = [@[@"value4", @"value5", @"value6"] mutableCopy]; |
@[ ] で NSArray を生成できます。
タイマー処理
1 2 3 4 5 6 7 8 9 10 11 |
//タイマー定義 timer_ = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(time:) userInfo:nil repeats:YES]; //タイマーイベント -(void)time:(NSTimer*)timer{ count += 0.1; NSLog(@"time:%f", count); //タイマーが有効かどうか NSString *str = [timer_ isValid] ? @"yes" : @"no"; NSLog(@"isValid:%@", str); } |
1 2 3 4 5 6 7 8 9 10 11 |
//タイマーが動いていないときにタイマー開始 if (![timer_ isValid]) { timer_ = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(time:) userInfo:nil repeats:YES]; } //タイマーが動いているときにタイマー停止 if ([timer_ isValid]) { [timer_ invalidate]; } |
NSLog
- NSStringをフォーマット出力する際はオブジェクトそのものを出力する %@ を利用する。
1 2 |
NSString *str = [[NSString alloc] initWithFormat:@"%d/%d/%02d", 2010, 12, 21]; NSLog(@"date format: %@", str); //NSStringをフォーマット出力する際は %@ を利用。 |
型変換
NSInteger → NSString
1 2 |
NSInteger num = 10; NSString *str = [NSString stringWithFormat:@"%d", num]; |
NSString → NSInteger
1 2 |
NSString *str = @"1500"; NSInteger num = [str intValue]; |
参考にさせていただいたページ