调用[myObject performSelector:@selector(something) withObject:nil];
与调用[myObject performSelector:@selector(something)];
相同吗?
答案 0 :(得分:5)
唯一的区别是您打算从@selector
调用的方法的签名。当方法不带参数时使用performSelector
,如果方法采用类型为performSelector:withObject
的单个参数,则使用id
。否则,他们都做同样的事情。
来自NSObject Protocol Reference:
讨论
此方法与performSelector相同:除了你 可以为aSelector提供参数。 aSelector应该识别出一个 采用id类型的单个参数的方法。对于其他方法 参数类型和返回值,使用NSInvocation。
正如查克指出的那样,这并没有真正得到执行(至少目前还没有)。下面的代码执行正常,没有任何例外被抛给我。
-(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!");
}