2012-08-17 76 views

回答

3

如果fun預計沒有參數,你可以這樣做:如果希望一個對象參數

[target performSelector:fun]; 

,你可以這樣做:

[target performSelector:fun withObject:someObject]; 

如果它期望兩個對象參數,您可以這樣做:

[target performSelector:fun withObject:someObject withObject:anotherObject]; 

如果需要三個以上的參數,或者如果它預期不是對象的參數,你必須使用objc_msgSend,由this answer解釋。

+0

非常感謝。你知道如何獲得這個樂趣作爲obj例如self.targetFun = fun; – user1052163 2012-08-17 17:43:05

0
- (id) init:(NSString*)fun{ 

[target NSSelectorFromNSString(fun)]; 

} 

- (void) methodCaller{ 
     [[MyClass alloc] init:NSStringFromSelector(@selector(method1))]; 
} 
+0

非常感謝。你知道什麼是(SEL)類型的樂趣,例如我不能這樣做「id targetFun = fun」; – user1052163 2012-08-17 17:54:34

+0

選擇器總是由計數器字符串表示。你能告訴場景,你可以在其中獲得選擇器的ID。好玩的是總是SEL類型選擇,如果你想將它從1種方法傳遞作爲一個對象以外,那麼我們寧願NSString的,因爲蘋果還與NSString的SEL的相互轉換隻提供了API。 – 2012-08-17 18:26:13

+0

非常感謝你真的工作。 – user1052163 2012-08-18 00:45:52

0

您可以使用三種mehods此:

  1. 使用performSelector:,如:[target performSelector:fun withObject:nil];
  2. 使用detachNewThreadSelector這樣的:[NSThread detachNewThreadSelector:fun toTarget:target withObject:nil];,但它會在另一個線程上運行。
  3. 使用NSInvocation喜歡:

NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:fun];
[inv invokeWithTarget:target];

+0

非常感謝你如何加載這個樂趣到另一點例如[singleton single] .fun = fun;這樣我可以移動這個有趣的OBJ到另一個類的函數 – user1052163 2012-08-17 17:59:42

+0

不能調用使用選擇'.'或'[目的地選擇]'這些方法。要麼打電話給任何上述方法或其變體。如果你需要將選擇器傳遞給另一個類,那麼在那裏創建一個'SEL'對象並將其傳遞給它。 – 2012-08-17 18:04:45

+0

使用可以像NSString一樣獲得樂趣。然後可以將其用作對象,但在這兩種情況下,都需要將SEL(伊娃)轉換爲對象。 「」運算符用於調用屬性的getter或setter而不起作用。 – 2012-08-17 18:28:12