How can I remove all performSelector:withObject:afterDelay:?

Unis picture Unis · Jan 21, 2010 · Viewed 11k times · Source

I ran in to a EXC_BAD_ACCESS when deallocating an object that has few performSelector:withObject:afterDelay where the selector methods is calling another object and I am releasing the object.

Somewhere in my class I am calling:

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

and in my class I have:

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

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

I just don't understand I thought when you dealloc it the object, everything associated with the object should be removed or canceled, even the performSelector with delay!

Answer

Ben Gottlieb picture Ben Gottlieb · Jan 21, 2010

Use NSObject's:

-cancelPreviousPerformRequestsWithTarget:selector:object: 

to cancel any pending perform selectors.