如何在ios中释放我的NSTimer对象?

如何在ios中释放我的NSTimer对象?,ios,nstimer,Ios,Nstimer,在我的应用程序中,当我从一个视图控制器移动到另一个视图控制器时,我需要释放我的NSTimer。如何在圆弧中释放此类对象?我正在使用下面的代码来创建和发布NSTimer,但我必须在视图控制器中的何处编写此发布代码 为了创造 - (void)viewDidLoad{ [super viewDidLoad]; updateBCK = [NSTimer scheduledTimerWithTimeInterval:(5.0) target:self selector:@selector(

在我的应用程序中,当我从一个视图控制器移动到另一个视图控制器时,我需要释放我的
NSTimer
。如何在圆弧中释放此类对象?我正在使用下面的代码来创建和发布
NSTimer
,但我必须在视图控制器中的何处编写此发布代码

为了创造

- (void)viewDidLoad{
    [super viewDidLoad];
    updateBCK = [NSTimer scheduledTimerWithTimeInterval:(5.0) target:self selector:@selector(changeImage) userInfo:nil repeats:YES];
    [updateBCK fire];
}


-(void)changeImage{

            static int i=0;
            if (i == [myImages count]){
                i=0;
            }
            [UIImageView beginAnimations:nil context:NULL];
            [UIImageView setAnimationDuration:0.6];
            mainBackgroundImageView.alpha=1;
            mainBackgroundImageView.image =[myImages objectAtIndex:i];
            NSLog(@"\n The main screen image is %@",[myImages objectAtIndex:i]);
            [UIImageView commitAnimations];
            i++;
        }
等待释放

[updateBCK invalidate];//
    updateBCK = nil;
提前谢谢

当我从一个视图控制器移动到另一个视图控制器时

如果要在视图解除或发布时执行某些清理任务,则应在
delloc
中执行此操作。这是最好的地方,在这种情况下,你可以实施它

-(void)dealloc{

[updateBCK invalidate];//
    updateBCK = nil;

}

希望这对你停止时间有帮助

使用下面的代码

[timer invalidate];  // timer is the name of timer object
你应该打电话

[timer invalidate];
timer = nil;
推送视图控制器的位置。如果这是一个问题,你仍然可以打电话进来

- (void) viewWillDisappear:(BOOL)animated;
另外,您应该在中初始化它

- (void) viewDidAppear:(BOOL)animated;
这更有道理

- (IBAction)button:(id)sender {

SecondViewController *second = [[SecondViewController alloc] 
       initWithNibName:@"secondViewController" 
       bundle:nil];


    [self presentViewController:second animated:NO completion:nil];

[self.timer invalidate];  // timer is the name of timer object
timer=nil;//it may work without this line too ;not sure
}

计时器保持对其目标的强引用。这意味着,只要计时器保持有效,就不会释放其目标。作为推论,这意味着计时器的目标尝试在其dealloc方法中使计时器无效是没有意义的。只要计时器有效,就不会调用dealloc方法


你推送新视图控制器的代码在哪里?我正在使用计时器在第一视图控制器中随机显示背景图像。你说你想在切换到另一个视图控制器时关闭计时器,对吗???。如果是这样,请在切换方法中使你的计时器无效。如果你发布了该部分内容,我可以给你确切的答案代码当我按下按钮时,我使用图像数组在我的第一视图控制器中随机显示,并在第一视图控制器中的按钮上装箱,我需要转到第二个视图控制器,并且我必须停止第一个视图控制器中的计时器。在ARC中,您不能实现dealloc方法,但dealloc方法没有在ARC中调用,我需要输入ARC@Mutawe是的,您可以实现,但不调用[super delloc],请不要否决投票先测试你自己。事实上,即使在ARC模式下,Dealloc也会被调用。这里的问题是计时器保留目标(在本例中为“self”)。如果计时器未失效,则您将面临一个保留周期。如果您使用3个视图控制器,则此逻辑不起作用。该逻辑在第二视图控制器和第三视图控制器之间工作。但不能在第一视图控制器和第二视图控制器中工作。这应该在与其位置无关的两个视图控制器之间工作。如果它在两个视图控制器和三个视图控制器之间工作,它也应该在一个视图控制器和二个视图控制器之间工作。两个视图控制器是否可以使用此代码从一个视图控制器切换到二个视图控制器。是的,这让我更有意义。终于用下面的代码解决了我的问题-(void)viewdide出现:(BOOL)动画{[super viewdide出现:动画];updateback=[NSTimer scheduledTimerWithTimeInterval:(3.0)目标:自选择器:@selector(changeImage)userInfo:nil repeats:YES];[updateback fire];}-(void)viewdide消失:(BOOL)动画{[super viewdide消失:动画];if([updateback有效]){[UpDeBeCK无效];UpDeaBCK=nIL;}好的工作。考虑接受这个作为答案:)!