2

打电话和打电话[myObject performSelector:@selector(something) withObject:nil];一样[myObject performSelector:@selector(something)];吗?

4

1 回答 1

5

唯一的区别是您打算从@selector. performSelector当方法不接受参数时使用,如果performSelector:withObject方法接受一个类型的参数时使用id。否则,他们都做完全相同的事情。

NSObject 协议参考

讨论

此方法与 performSelector 相同:除了可以为 aSelector 提供参数。aSelector 应该标识一个采用 id 类型的单个参数的方法。对于具有其他参数类型和返回值的方法,请使用 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 回答