2012-06-16 36 views
1

我一直想知道的代码差分零

以下行
[self performSelector:@selector(myMethod) withObject:self afterDelay:1.0]; 
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 
  1. 请告诉我2行以上的代码之间的差。
  2. 什么时候应该设置对象为nil,我们应该在什么时候设置对象为self

在大多数情况下,我注意到要设置的对象为nil

+1

阅读文档https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html –

+0

我已阅读文档。我已经在相同的上下文中尝试了两行代码,并且工作正常。所以想知道我找不到Google的区别。 –

+0

- (无效)performSelector:(SEL)aSelector withObject:(ID)anArgument afterDelay:(NSTimeInterval)延迟 anArgument:被调用时的参数传递给该方法。通过 如果该方法不带参数,则为零。 –

回答

0

区别在于您是否将对象传递给选择器。所有选择器都在描述一种方法。如果希望选择器(即,方法),以将传递中,说一个数组,字典,或类中的一些物体上工作

[self performSelector:@selector(myMethod:usingThis:) withObject:nil afterDelay:1.0]; 

目前:

[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 

不同于。你使用withObject。如:

[self performSelector:@selector(myMethod:) withObject:myDictionary afterDelay:1.0]; 

-(void)myMethod:(NSDictionary*)dictionary 
{ 
// Do something with object 
} 

您可以传递任何东西,包括当前类(如个体经营)的参考,当你在你的例子一样。

0

在第一个示例中,您将self作为参数传递给调用时的方法。但是你的方法不需要任何参数,所以它是不必要的。

在第二个示例中,您通过了nil,因此该方法将nil传递给它不存在的参数,然后终止。由于你的方法没有参数,所以这更“有效”,并且“无”。对象是NULL的等价物,那么你通过的绒毛越少,无论如何都会被忽略。

+0

Quoi?你的意思是这个方法没有争论?我可以发送零任何我喜欢的方法。 – CodaFi

+0

那如果u传递零,然后我的意思方法亘古不具有任何参数,如果u传递价值有争论其中U可以通过-1意味着我错在这里中号 –

+0

。无论何时,只要我愿意,我都可以将nil发送给有一百万个参数的方法。 –

8

在您列出的示例中,您不会遇到任何不同的行为,因为您的方法myMethod不带任何参数。如果这是有用的,那么当你有一个方法需要参数。假设我们声明了一个方法,squareRootMethod:需要一个NSNumber并返回squareRoot。那么你会打电话给[self performSelector:@selector(squareRootMethod:) withObject:numberToRoot afterDelay:1.0]

也有像performSelector:withObject:withObject:方法的选择器采取多个参数。

+1

'withObject:withObject'?先生,我可以看看一些文件吗? – CodaFi

+4

[performSelector:withObject:withObject:](https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/doc/uid/ 20000052-BBCGGCBE) –

+0

好吧,我会... – CodaFi

3

通知这两者之间的区别是:

@selector(myMethod) 
@selector(myMethod:) 

第一种是不带任何参数的方法,所述第二个是一个参数的方法。您正在使用的performSelector:方法的withObject:部分允许您在调用该方法时将对象传入该方法。但是,在该方法不采用任何参数的情况下,这并不重要,因为它不会被使用。