Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 295877
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T06:29:50+00:00 2026-05-12T06:29:50+00:00

If I have a view with a performSelector set to fire after a delay:

  • 0

If I have a view with a performSelector set to fire after a delay:

[self performSelector:@selector(generateBall) withObject:NULL afterDelay:1.5];

…but I removeFromSuperview that view before the selector fires (for example, due to user interaction), then my app crashes.

Is there a way to kill the delayed selector in the dealloc method for that view?

EDIT:

I’ve tried both:

[[NSRunLoop mainRunLoop] cancelPerformSelector:theBall target:self argument:nil];

and

[[NSRunLoop currentRunLoop] cancelPerformSelector:theBall target:self argument:nil];

and while both work (allowing me to load a new view), loading the previous view ends up giving me a gray screen.

I haven’t been able to find any tutorials or other information about cancelPerformSelector other than those Apple docs that were listed, and the documentation on threads and run loops seem to be very convoluted (mostly because they don’t list working code samples, which would make it easier for me to step through and understand what was going on).

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T06:29:50+00:00Added an answer on May 12, 2026 at 6:29 am

    Because I’m using performSelector:afterDelay, the only way I’ve been able to properly “kill” any previously requested but not launched functionality is using:

    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:theBall object:nil];
    

    The following code sample shows how this works (create a new View template XCode project called “select”, and replace the selectViewController.h file with this):

    #import "selectViewController.h"
    
    @implementation selectViewController
    
    UILabel *lblNum;
    UIButton *btnStart, *btnStop;
    int x;
    
    - (void) incNum {
        x++;
        lblNum.text = [NSString stringWithFormat:@"%i", x];
        [self performSelector:@selector(incNum) withObject:NULL afterDelay:1.0];
    }
    
    - (void) stopCounter {
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(incNum) object:NULL];
    }
    
    - (void)viewDidLoad {
        x = 0;
    
        lblNum = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        lblNum.textAlignment = UITextAlignmentCenter;
        [self.view addSubview:lblNum];
    
        btnStart = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btnStart.frame = CGRectMake(40, 270, 240, 30);
        [btnStart setTitle:@"start" forState:UIControlStateNormal];
        [btnStart addTarget:self action:@selector(incNum) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btnStart];
    
        btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btnStop.frame = CGRectMake(40, 310, 240, 30);
        [btnStop setTitle:@"stop" forState:UIControlStateNormal];
        [btnStop addTarget:self action:@selector(stopCounter) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btnStop];
    
        [self performSelector:@selector(incNum) withObject:NULL afterDelay:1.0];
        [super viewDidLoad];
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    }
    
    - (void)viewDidUnload {
    }
    
    - (void)dealloc {
        [lblNum release];
        [super dealloc];
    }
    
    @end
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 177k
  • Answers 178k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Call Application.Exit() instead. If you really want the Close event… May 12, 2026 at 3:34 pm
  • Editorial Team
    Editorial Team added an answer String.isEmpty() was added in Java 6. In earlier versions you… May 12, 2026 at 3:34 pm
  • Editorial Team
    Editorial Team added an answer This has proved to be a hosting problem somehow the… May 12, 2026 at 3:34 pm

Related Questions

I have an scroll view with some sophisticated animations happening during scrolling. Although after
I'm stuck on (what I think is) a simple views issue. I have a
How does the Authorize Tag determine if the user is authorized or not? Like
I have a Canvas A with scrollpolicy on, A has one unique Child canvas

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.