Question

Je sais que bien d'appeler une méthode comme si elle était vide, même si elle a une valeur de retour (comme printf), mais qu'en est-ce?

[NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(method) userInfo:nil repeats:NO];

Puis-je juste qu'il y flotter sans utiliser l'objet retourne? C'est comme appeler [NSObject alloc] sans attribuer cela à un pointeur ou quoi que ce soit. Est-ce une fuite de mémoire? La raison est que je ne veux pas l'assigner à une variable (la minuterie) car alors si je libère (ou autoreleaase), il est supprimé avant qu'elle ne se déclenche. Et je ne veux pas utiliser un Ivar. Alors, que dois-je faire?

EDIT: Je découvert [self performSelector: @selector (myMethod) withObject: néant afterDelay: 0,3]; ce qui est beaucoup mieux pour cela que d'utiliser la minuterie.

Était-ce utile?

La solution

NSTimer créée par cet appel appartient à l'objet NSRunLoop courant, donc il ne va pas être autoreleased par une vidange de la piscine autorelease. Et il est faux de libérer manuellement. NSTimer doit être retiré en l'envoyant invalidate message :

  

Pour demander la suppression d'une minuterie à partir d'un objet NSRunLoop, envoyez le minuteur le message d'invalidation du même fil sur lequel la minuterie a été installé. Ce message désactive immédiatement la minuterie, de sorte qu'il ne touche plus l'objet NSRunLoop. La boucle d'exécution supprime et libère la minuterie, soit juste avant le retour de la méthode invalidera ou à un moment plus tard.

Donc, fondamentalement, vous devriez avoir une variable et utiliser invalidate au lieu de version

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top