objective c - Is it possible to cancel PerformSelector on multiple objects? -


i have few classes can call performselector:afterdelay.

in circumstances want cancel , of them.

however cancelperformselector type methods take target, seem there no way cancel in 1 go (as there different targets)?

unless specifying nil target cancel everything?

or target specified [nsrunloop mainrunloop] cancel such as

[nsobject cancelpreviousperformrequestswithtarget:[nsrunloop mainrunloop]] 

assuming have view controller declared similar following:

@interface carviewcontroller : uiviewcontroller  @property (strong) id myobject;  @end 

also assuming you've registered request perform selector myobject instance somewhere in implementation code below:

[self.myobject performselector:@selector(someselector) withobject:nil afterdelay:0.0]; 

for sake of argument, want view controller cancel previous perform requests before unloaded memory, -viewwillunload message like:

- (void)viewwillunload {     [nsobject cancelpreviousperformrequestswithtarget:self.myobject] } 

this cancel perform requests registered particular instance. joe pointed out, if not keeping strong reference objects , you're storing objects in nsarray, need iterate array , call +cancelpreviousperformrequestswithtarget: each element of array, or nsarray's -enumerateobjectsusingblock::

- (void)viewwillunload {     [myarray enumerateobjectsusingblock:^(id obj, nsuinteger idx, bool *stop) {         [nsobject cancelpreviousperformrequestswithtarget:obj];     }]; } 

hope helps.


Comments