頭と尻尾はくれてやる!

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


performSelector:withObject:で送信先が引数無しでもOKなのは仕様?

performSelector:って便利だよね。使っててあれ?と思うことがあったんだけど、だいぶ単純にしたコードを書くよ。
{
    SEL selector = @selector(method);
    [self performSelector:selector withObject:object];
}
-(void)method
{
    //なんかの処理
}
↑実行したいメソッド-(void)methodは引数を取らないんだけど、呼び出し元ではperformSelector:withObject:で呼んでる。
なんかモヤモヤするコードでしょ?
でも、これちゃんと動くんだよね。Xcodeは警告も出さないし。

同じように引数を二つ送れる
performSelector:withObject:withObject:
でも同じでメソッドが引数を受け取らなくて、一つだけ受け取るメソッドでも問題ない。一つだけ受け取るメソッドだと最初のだけ受け取ってくれる。

これ仕様なのかな。仕様だとするとすごく便利なんだよね、この自由さが。

実際にやってたはこんなの。
引数が一つの場合と二つの場合のメッセージ送信先があるとして、条件によって送信先が変わる。
それでも引数の数で場合分けしなくてもえいや!とperformSelector:withObject:withObject:だけでいけるんだもの。

仕様と思ってたけどiOSがバージョンアップしたら落ちるとかないだろうなあ?

<< バグではありません、仕様ですの「仕様」は英語では?   TopPage  NSData ←→ NSString変換で文字化け >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/776-071f4e61




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

FC2Ad