iOS 中 self.timer = nil 与 [self.timer invalidate] 有什么区别

objectiveIOS

1个回答

写回答

lllllllxy

2025-06-18 12:50

+ 关注

IOS
IOS

区别:self.timer = nil 与 [self.timer invalidate]

IOS开发中,我们经常会使用定时器来实现一些定时任务,比如定时刷新UI、定时请求数据等。当我们不再需要使用定时器时,需要进行一些操作来停止定时器的运行。在IOS中,停止定时器有两种常用的方式:将定时器置为nil(self.timer = nil)和调用invalidate方法([self.timer invalidate])。

将定时器置为nil

将定时器置为nil是一种简单的停止定时器的方式。通过将定时器对象赋值为nil,可以有效地将定时器从内存中释放,停止定时器的运行。这种方式适用于不再需要使用该定时器对象的情况下,可以直接将其置为nil,避免内存泄漏。

调用invalidate方法

调用invalidate方法是另一种常用的停止定时器的方式。invalidate方法是NSTimer类的一个方法,调用该方法可以停止定时器的运行。调用invalidate方法后,定时器对象会被标记为无效,即不能再次启动定时器。与将定时器置为nil相比,调用invalidate方法更加灵活,可以在需要重新启动定时器时再次调用scheduledTimerWithTimeInterval方法来创建新的定时器对象。

案例代码

下面是一个简单的案例代码,演示了如何使用定时器,并通过不同的方式停止定时器的运行:

// 定义一个全局的定时器对象

@property (nonatomic, strong) NSTimer *timer;

- (void)viewDidLoad {

[super viewDidLoad];

// 创建定时器对象

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];

}

- (void)timerAction {

// 定时器回调方法,每秒执行一次

// 做一些定时任务

// 判断是否需要停止定时器

if (需要停止定时器的条件) {

// 停止定时器的方式一:将定时器置为nil

self.timer = nil;

// 停止定时器的方式二:调用invalidate方法

[self.timer invalidate];

self.timer = nil;

}

}

在上面的代码中,首先我们通过调用scheduledTimerWithTimeInterval方法创建了一个定时器对象,并设置了定时器的时间间隔为1秒。然后,在定时器的回调方法timerAction中,我们可以执行一些定时任务。在满足特定条件时,我们可以选择将定时器置为nil或调用invalidate方法来停止定时器的运行。

将定时器置为nil和调用invalidate方法是两种常用的停止定时器的方式。将定时器置为nil可以直接将定时器对象从内存中释放,适用于不再需要使用该定时器对象的情况。调用invalidate方法可以将定时器标记为无效,使其不能再次启动,适用于需要在将来重新启动定时器的情况。根据实际情况选择适合的方式来停止定时器的运行,可以提高代码的可读性和性能。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号