Search code examples
iphoneobjective-cexc-bad-access

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


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!


Solution

  • Use NSObject's:

    -cancelPreviousPerformRequestsWithTarget:selector:object: 
    

    to cancel any pending perform selectors.