2012/06/13更新

[XCODE] @selectorの使い方、呼び出し方

このエントリーをはてなブックマークに追加      

今日はiPhoneアプリ開発ネタでライトな感じで。
今日は、Cocoaフレームワークで時々出てくる、@selectorについて、ブログを書きたいと思います。
その使い方とか。これを使えるようになると、JavaScriptのようなコールバック処理を 実現できるようになります(*´∇`*)

画像




@selectorの使い方、呼び出し方

ではさっそく。以下のように、@selectorを指定して、呼び出すメソッドを指定することが出来ます。
今回は、引数が2つあるメソッドを読み出す例を記載します。
// RSSのフィードを取得する処理を持つクラスを
// インスタンス化しています。
FeedListLoader *loader = [[FeedListLoader alloc] init];

// フィードをサーバーから取得するメソッドを
// 呼び出します。引数に処理終了時に呼び出される
// コールバックメソッド(@selector)と、そのメソッドを持つインスタンスを指定します。
[loader loadFeedListWith:self selector:@selector(callbackFeedListLoaderWithError:xml:)];

続いて、@selectorを実際に使う箇所です。
以下例では、処理成功時と処理失敗時に、それぞれ、指定されたメソッドを呼び出しています。
- (void) loadFeedListWith:(id)callbacker callbackMethod:(SEL)callbackMethod {

  NSString *feedXML = /*Feedを読み込む処理を実施*/;

  if (feedXML) { // 処理成功時

    // performSelector:withObject:withObjectという
    // メソッドを呼び出すことで、@selectorで指定されたメソッドを
    // 呼び出すことができる
    [callbacker performSelector:callbackMethod
                     withObject:nil
                     withObject:xml];

  } else { // 処理失敗時

    // エラー原因を設定する
    NSError *error
      = [NSError errorWithDomain:nil 
                            code:ERROR_CODE_BAD_REQUEST
                        userInfo:nil];

    // エラーを通知する
    [callbacker performSelector:callbackMethod
                     withObject:error
                     withObject:nil];
  }
}

上記のコールバックメソッドは、第1引数にエラー情報を受け取ります。node.jsっぽい設計です。




最後に

Cocoaフレームワークで時々でてくる@selectorってやつ。 それについて調べて色々と知ることが出来て、ちょっとスッキリしました(*´∇`*)
こーゆう設計の知識を増やすことで、今後の開発にも役立つ場面ができると良いなぁ。
最後までお付き合い頂きましてありがとうございました☆






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。