2009-10-09 6 views
0

Ne postfixez-vous que le nom de la méthode avec: si vous appelez un objet étranger?Objective-C performSelector quand utiliser le côlon?

Pour une raison quelconque

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

ne fonctionne pas, mais

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

Est-ce!

EDIT:

Déclaré dans la mise en œuvre d'une classe, mais pas l'interface.

- (void)myMethod 
{ 
    // Some stuff 
} 
+0

Comment id myMethod a déclaré - à savoir quelle est la signature de la méthode ? – Mark

Répondre

9

Le signe deux-points représente un argument de méthode. Depuis myMethod ne prend aucun argument son sélecteur ne peut pas avoir deux points. Si vous aviez plusieurs arguments comme celui-ci ...

- (void)myMethod:(id)method object:(id)object enabled:(BOOL)bool { 
    // Some Stuff 
} 

... le sélecteur serait être @selector (myMethod: objet: activé :)

4

En Objective-C, les deux points sont une partie du nom de la méthode. Autrement dit, myMethod et myMethod: sont des sélecteurs distincts (et dans votre cas, seul ce dernier existe).

Par exemple, pour une méthode déclarée comme:

-(void)doSomethingWithFoo:(int)foo andBar:(int)bar; 

Le sélecteur est doSomethingWithFoo:andBar:.

+1

en fait, dans son cas, seul le premier existe. – mmc

Questions connexes