我一直在想下面的代码行
[self performSelector:@selector(myMethod) withObject:self afterDelay:1.0];
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0];上述两行代码之间的区别是什么。self
nil,什么时候应该将对象设置为nil在大多数情况下,我注意到要将对象设置为nil。
发布于 2012-06-16 14:51:53
区别在于您是否要将对象传递给选择器。选择器所做的只是描述一个方法。
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0];有别于:
[self performSelector:@selector(myMethod:usingThis:) withObject:nil afterDelay:1.0];现在,如果您希望选择器(即方法)处理传入的某个对象,比如数组、字典或类。你使用withObject。如:
[self performSelector:@selector(myMethod:) withObject:myDictionary afterDelay:1.0];
-(void)myMethod:(NSDictionary*)dictionary
{
// Do something with object
}您可以传递任何内容,包括对当前类的引用(例如self),就像在示例中所做的那样。
发布于 2012-06-16 14:41:48
在您列出的示例中,您不会遇到任何不同的行为,因为您的方法myMethod没有参数。这是有用的地方,是当你有一个方法,接受参数。
假设我们声明了一个方法,squareRootMethod:,它接受一个NSNumber并返回squareRoot。然后你会打电话给[self performSelector:@selector(squareRootMethod:) withObject:numberToRoot afterDelay:1.0]
也有用于选择器的performSelector:withObject:withObject:之类的方法,这些方法包含多个参数。
发布于 2012-06-16 14:38:34
在第一个示例中,您将self作为参数传递给调用方法时传递给它。但是你的方法不需要参数,所以它是不必要的模糊。
在第二个示例中,您传递了nil,因此方法被传递给它不存在的参数,然后终止。这在某种意义上更“有效”,因为您的方法不需要任何参数,而“零”。是等于NULL的对象,那么不管怎么说,您都可以传递更少的不被忽略的内容。
https://stackoverflow.com/questions/11064294
复制相似问题