gpt4 book ai didi

ios - NSTimer的更好替代方案

转载 作者:行者123 更新时间:2023-12-01 17:25:58 25 4
gpt4 key购买 nike

我只是想知道,有没有比NSTimer更好,更有效的功能要使用?我的ViewDidLoad函数上有这样的NSTimer代码:

[NSTimer scheduledTimerWithTimeInterval:900.0f target:self selector:@selector(methodToRun) userInfo:nil repeats:YES];

使用方法methodToRun:
-(void)methodToRun {
if(currentTime == presetTime) {
//do something
}
}

这可以正常工作,但问题是,这会占用大量内存,并且我收到了内存警告。那么,有什么更好,更有效,更省内存的方式来连续触发我的methodToRun,以检查currentTime是否等于预设时间?

最佳答案

您可以使用dispatch_after

可以通过使用dispatch_after方法和指向self的弱指针来实现此目的的替代解决方案。

__weak id weakSelf = self;
__block void (^timer)(void) = ^{

double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

id strongSelf = weakSelf;

if (!strongSelf) {
return;
}

// Schedule the timer again
timer();

// Always use strongSelf when calling a method or accessing an iVar
[strongSelf doSomething];
strongSelf->anIVar = 0;
});
};

// Start the timer for the first time
timer();

这样,您将有一个计划的任务,该任务将每秒钟调用一次,它不会保留目标(自身),并且如果释放了目标,它将结束自身。

资料来源: NSTimer alternative

关于ios - NSTimer的更好替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com