を呼び出すこと[myObject performSelector:@selector(something) withObject:nil];
は、単に呼び出すことと同じ[myObject performSelector:@selector(something)];
ですか?
2141 次
1 に答える
5
唯一の違いは、 から呼び出すメソッドの署名です@selector
。performSelector
メソッドが引数を取らない場合に使用し、メソッドperformSelector:withObject
が type の単一の引数を取る場合に使用しますid
。そうでなければ、どちらもまったく同じことをします。
討論
このメソッドは、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 に答える