96 votes

Comment utiliser performSelector: withObject: afterDelay: with primitive types in Cocoa?

L' NSObject méthode performSelector:withObject:afterDelay: me permet d'appeler une méthode sur l'objet avec un objet en argument après un certain temps. Il ne peut pas être utilisé pour les méthodes avec un non-argument d'objet (par exemple, ints, des flotteurs, des structures, non pointeurs d'objet, etc.).

Quel est le plus simple moyen de réaliser la même chose avec une méthode avec un non-argument d'objet? Je sais que pour l'ordinaire performSelector:withObject:, la solution est d'utiliser NSInvocation (qui en passant est vraiment compliqué). Mais je ne sais pas comment gérer le "retard" de la partie.

Merci,

70voto

CC L. Points 656

Voici ce que j’ai utilisé pour appeler quelque chose que je ne pouvais pas modifier à l’aide de NSInvocation :

35voto

harms Points 6348

Juste envelopper l’int booléenne, flotteur, ou même dans un NSNumber.

Pour les structs, je ne sais pas d’une sollution à portée de main, mais vous pourriez faire une catégorie distincte de ObjC qui possède une telle structure.

8voto

Remus Rusanu Points 159382

Peut-être NSValue, assurez-vous simplement que vos pointeurs sont toujours d’actualité après le délai (ie. pas d’objets alloués sur la pile).

8voto

Michael Gaylord Points 2728

Je sais que c’est une vieille question, mais si vous générez iOS SDK 4 + puis vous pouvez utiliser des blocs de le faire avec peu d’effort et de rendre plus lisible :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X