2010-01-21 9 views
15

Je couru dans un EXC_BAD_ACCESS lorsque désaffecter un objet qui a peu performSelector:withObject:afterDelay où les méthodes de sélection est d'appeler un autre objet et je libère l'objet ...Comment puis-je supprimer tout execSelector: withObject: afterDelay :?

// quelque part dans ma classe j'appelle

[self performSelector:@selector(callObject1Function) withObject:nil afterDelay:2.0]; 


- (void)callObject1Function{ 
    [object1 function1] // Here i am getting "EXC_BAD_ACCESS" 
} 

- (void)dealloc { 
[object1 release]; 
[super dealloc]; 
} 

Je ne comprends tout simplement pas je pensais quand vous dealloc l'objet, tout ce qui est associé à l'objet doit être supprimé ou annulé, même le performSelector avec un retard !! Quelqu'un peut expliquer s'il vous plaît, Merci .....

Répondre

27

Utilisation de NSObject:

-cancelPreviousPerformRequestsWithTarget:selector:object: 

pour annuler tout attente effectuer sélecteurs.

+18

Aussi juste NSObject + cancelPreviousPerformRequestsWithTarget: si vous voulez éliminer tous les sélecteurs et objets effectuant des requêtes sur cette cible sans spécifier de sélecteurs et d'objets – Bogatyr

23

J'ai utilisé le code suivant dans toutes mes applications et cela fonctionne.

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(MethodName) object:nil]; 

Merci, Hemang.