2012-06-16 40 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:部分允許您在調用該方法時將對象傳入該方法。但是,在該方法不採用任何參數的情況下,這並不重要,因爲它不會被使用。