ラベル Objective-C の投稿を表示しています。 すべての投稿を表示
ラベル Objective-C の投稿を表示しています。 すべての投稿を表示

2010年9月2日木曜日

クラスの調査

objective-cで、あるオブジェクトがどのクラスに属しているかを調べる方法です。


こんな感じのようです。
- (void)method:(id)object
{
    // objectがNSStringクラスかどうかを確認
    if ([object isKindOfClass:[NSString class]]) {
      // NSStringクラスの場合
      ...
    }

2010年7月28日水曜日

objective-cのメモリ管理について

Cocoaメモリ管理プログラミングガイトを読んでみました。メモ。

  • 1つのコードブロック内では、copy、alloc、およびretainを使用した回数と、releaseおよび autoreleaseを使用した回数は等しくなければならない。
  • 「alloc」または「new」で始まる名前のメソッドや、「copy」を含む名前のメソッド(たとえ ば、alloc、newObject、mutableCopy)を使用して作成した場合、または オブジェクトに retainメッセージを送信した場合にのみ、そのオブジェクトを所有できる。
  • 自分が所有するインスタンス変数を解放するためにdeallocを実装する。
  • (独自のdeallocメソッド内で親の実装を呼び出す場合以外は)deallocを直接呼び出してはならない。
  • 配列、辞書、集合などのコレクションにオブジェクトを追加または設定すると、コレクションがそ のオブジェクトの所有権を取得します。オブジェクトがコレクションから削除されたりコレクショ ン自体が解放されたりすると、コレクションは所有権を放棄します。

2010年6月26日土曜日

クラス定数はない

Objective-Cにクラス定数はないようです。
UIKitとかで使われている定数を見ると、typedef enumで定義されているみたい。
typedef enum {
    MyClassConstValue1,
    MyClassConstValue2,
} MyClassConstValue;

@interface MyClass : NSObject {

}

@end
あ、値を持つ定数はどうするのかな。

2010年6月20日日曜日

1日後のNSDateインスタンスを取得する方法

Objective-CのNSDateで日付を1日進めたいときにどうするかです。こうします。
// 日付のオフセットを生成
NSDateComponents *dateComp = [[NSDateComponents alloc] init];

// 1日後とする
[dateComp setDay:1];

// 1日後のNSDateインスタンスを取得する
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:dateComp toDate:[NSDate date] options:0];

[dateComp release];
1日前の日付を取得する場合は[dateComp setDay:-1]で、1ヶ月後とかだとsetMonthを利用します。