2

を呼び出すこと[myObject performSelector:@selector(something) withObject:nil];は、単に呼び出すことと同じ[myObject performSelector:@selector(something)];ですか?

4

1 に答える 1

5

唯一の違いは、 から呼び出すメソッドの署名です@selectorperformSelectorメソッドが引数を取らない場合に使用し、メソッドperformSelector:withObjectが type の単一の引数を取る場合に使用しますid。そうでなければ、どちらもまったく同じことをします。

NSObject プロトコル リファレンスから:

討論

このメソッドは、aSelector に引数を指定できることを除いて、performSelector: と同じです。aSelector は、型 ID の引数を 1 つ取るメソッドを識別する必要があります。他の引数の型と戻り値を持つメソッドについては、NSInvocation を使用してください。

Chuck が指摘しているように、これは実際には強制されていません (少なくとも現時点では)。以下のコードは、例外がスローされることなく正常に実行されました。

-(void)viewDidLoad
{
    [super viewDidLoad];    
    [self performSelector:@selector(foo) withObject:nil];
}
-(void)foo
{
    NSLog(@"foo!");
}

一方、このバージョンのコード問題を引き起こしました。したがって、両方の方法では機能しません。

-(void)viewDidLoad
{
    [super viewDidLoad];    
    [self performSelector:@selector(foo)];
}
-(void)foo:(id)myParameter
{
    NSLog(@"foo!");
}
于 2011-12-15T01:45:58.473 に答える