我在一个线程里起了一个runloop,开启了一个timer,但我发现页面返回时不走dealloc,timer无法停止,求大神帮助

#import "MyViewController.h"

@interface MyViewController ()
{
    NSTimer *_timer;
}
@end

@implementation MyViewController

- (void)dealloc
{
    [_timer invalidate];
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeCountdownTime) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
}

- (void)changeCountdownTime
{
    // do something
}

- (void)back
{
    [self.navigationController popViewControllerAnimated:YES];
}
阅读 2.1k
1 个回答

推荐写法是在 viewWillAppear: 中先写 [_timer invalidate]; 然后写 _timer = nil; 之后才会销毁 vc 然后调用 -dealloc 方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进