頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


異なるクラスのオブジェクトへ同じメッセージを送る

こういうケースがあるとするよ。
似たようなクラスAClassとBClassの二つがある。
あるクラス内から条件によってどちらかへメッセージを送りたい。
メッセージの送信先は同じメソッド名なんだ。
{
    NSObject *targetObject;
    if (flag) {
        targetObject = [[AClass alloc] init];
    } else {
        targetObject = [[BClass alloc] init];
    }
    [targetObject commonMethod];
}
↑流れ的にはこんなの。メソッド名は同じなので条件式で分岐したそれぞれでメッセージを送らずに、送信先をtargetObjectってことで保持しておいて、そこに対してメッセージを送ろうって考えね。
ただこのコードは意図通りに動いてくれるんだけどXcodeは警告を出すんだ。

Xcodeの警告

'NSObject' may not respond to 'commonMethod'
って出る。そりゃそうだよね、NSObject型にcommonMethodなんて俺が作ったメソッド名なんてないから。

このように、どういうクラスになるかわからない場合の参照先を一つの変数で保持しておくのってどうするんだ?ってなってさ。
単にポインタなんだからオブジェクト生成後にそのポインタを保持すりゃいいのか、どうするんだっけ?とか思ったんだけど、よく考えたらidってのがあったことを思い出したよ。
{
    //NSObject *targetObject;
    id targetObject;
    if (flag) {
        targetObject = [[AClass alloc] init];
    } else {
        targetObject = [[BClass alloc] init];
    }
    [targetObject commonMethod];
}
↑なんのことはない、単にidにしただけなんだけどね。これで警告も消えるし、ちゃんと動く。
あまり自分でidとか書かないから忘れていたよ。

<< UIImageViewオブジェクトにジェスチャー設定もボタンもダメ?   TopPage  カテゴリでCGPointを配列へ出し入れする(修正版) >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/780-d543cd7f




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad