Swift version: 5.10
You can make a method call run after a number of seconds have elapsed using perform(_:withObject:afterDelay:)
, like this:
perform(#selector(yourMethodHere), with: nil, afterDelay: 1)
However, what if you change your mind, and decide you don't want yourMethodHere()
to be called? As long as you act before that timer expires, you have two options: cancel that specific delayed call, or cancel all delayed calls.
To cancel that specific method call, you need to use the method cancelPreviousPerformRequests(withTarget:)
on NSObject
. Provide it with a target (where the method was going to be called), as well as the same selector and object you used when calling perform()
, and it will cancel that delayed call.
For example:
// set up a delayed call…
perform(#selector(yourMethodHere), with: nil, afterDelay: 1)
// …then immediately cancel it
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(yourMethodHere), object: nil)
Being able to filter the cancellation by both selector and object means you can be very specific: "cancel the printing call for this filename."
If you've made a number of delayed calls and want to cancel them all – very helpful if you're about to leave a view controller, for example, and want to abandon any queued work – you can use this method call instead:
NSObject.cancelPreviousPerformRequests(withTarget: self)
That will cancel every call that was queued up on self
, regardless of which selectors and objects were used.
If you're making delayed calls on a specific object, just use that object in place of self
. For example:
myObj.perform(#selector(yourMethodHere), with: nil, afterDelay: 1)
NSObject.cancelPreviousPerformRequests(withTarget: myObj, selector: #selector(yourMethodHere), object: nil)
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 4.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.