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

11,100

Solution 1

Use NSObject's:

-cancelPreviousPerformRequestsWithTarget:selector:object: 

to cancel any pending perform selectors.

Solution 2

I have used following code in my all apps and it's working.

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

Thanks, Hemang.

Share:
11,100
Unis
Author by

Unis

Updated on June 21, 2022

Comments

  • Unis
    Unis about 2 years

    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!

  • Bogatyr
    Bogatyr almost 14 years
    Also just NSObject's +cancelPreviousPerformRequestsWithTarget: if you want to eliminate all selector and object perform requests to that target without specifying selectors and objects