gpt4 book ai didi

ios - 引用 Objective-C 中带有 grand central dispatch/dispatch_async 的后台队列

转载 作者:行者123 更新时间:2023-11-29 12:39:33 25 4
gpt4 key购买 nike

我目前正在尝试在一段时间内在后台运行一个进程,以确保用户在我收集数据时仍然可以浏览应用程序。我发现我应该为此使用 GCD。但是,我不确定如何让 arrayBuild 也在后台队列中运行。

如何将它也添加到后台队列?当删除对 dispatch_async 的引用时,应用程序工作正常,所以我知道问题出在线程上。

- (IBAction)buttonPressed:(id)sender {

dispatch_async(backgroundQueue, ^{

manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyBest;

/* Removed for testing
[manager startUpdatingLocation];
*/

// TEST

myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(arrayBuild)
userInfo:nil
repeats:YES];

// Initialise Array
resultsArray = [[NSMutableArray alloc]init];

// END TEST

});

}

- (void)arrayBuild {

loopCount++;

if (loopCount >= 11) {

// Invalidate Timer
[myTimer invalidate];
myTimer = nil;

// Find Average
NSNumber *avg = [resultsArray valueForKeyPath:@"@avg.self"];

// Change Text of Label to Average & Log
self.signal.text = [NSString stringWithFormat:@"%@",avg];
NSLog(@"%@",avg);



}else{

// Declare Signal Strength
float signalstrength = CTGetSignalStrength();

// Individual Result & Convert to Integer
NSString *result = [NSString stringWithFormat:@"%f", signalstrength];
NSInteger resultInt = [result integerValue];

// Add Object
[resultsArray addObject:[NSNumber numberWithFloat:resultInt]];

// Change Text of Label Each Second
self.signal.text = [NSString stringWithFormat:@"%d",loopCount];
NSLog(@"%f",signalstrength);

}

}

最佳答案

您不能像那样在后台队列中创建计时器。 NSTimer 需要一个运行循环,而后台队列通常没有。你可以使用 GCD timer source如果您希望计时器在自定义后台队列上触发(或者更糟,创建您自己的 NSThread 并在该线程上启动运行循环,然后在该线程上安排 NSTimer线程的运行循环),但消除 GCD 代码并从主运行循环启动计时器会更容易(即不要将计时器的创建分派(dispatch)到后台队列)。

同样,您也应该从主线程配置并启动 CLLocationManager 位置更新。我不认为像你那样做会导致问题,但这是不必要的。

计时器和位置更新是异步发生的,只要适当的处理程序运行得相当快,就不必担心将它们安排在后台队列中。主线程一般没问题。

关于ios - 引用 Objective-C 中带有 grand central dispatch/dispatch_async 的后台队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362903/

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