Cancel [self performSelector:… withObject:nil afterDelay:20];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(sr) object:nil]; Please read the documentation. 🙂 The documentation for -performSelector:withObject:afterDelay: points you to the methods for canceling a queued perform request.