gpt4 book ai didi

iphone - 在 iOS 中创建一个连续的后台线程

转载 作者:可可西里 更新时间:2023-11-01 05:31:28 33 4
gpt4 key购买 nike

我需要创建一个仅在应用程序处于事件模式时才工作的后台处理器。我已尝试对我想要实现但无法实现的目标进行粗略描述。

我希望这个后台处理器在应用程序进入非事件阶段时进入休眠状态,并在应用程序进入事件模式时恢复。我在下面提供了我所做工作的框架。谁能帮我解决这个问题。

AppDelegate.h

#import <Foundation/Foundation.h>

@class BackgroundProcessor;

@interface AppDelegate_iPhone : UIResponder<UIApplicationDelegate>{
BackgroundProcessor* processor;
}

@property(nonatomic) BackgroundProcessor *processor;

@end

AppDelegate.m

#import "AppDelegate_iPhone.h"
#import "BackgroundProcessor.h"


@implementation AppDelegate_iPhone

@synthesize processor;

-(BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
processor = [[BackgroundProcessor alloc]init];
[processor Start];
return YES;
}

-(void) applicationDidEnterBackground:(UIApplication *)application
{
[processor Sleep];
NSLog(@"Entered Background");
}

-(void) applicationDidBecomeActive:(UIApplication *)application
{
[processor Resume];
NSLog(@"Became Active");
}
@end

背景处理器.h

#import <Foundation/Foundation.h>

@interface BackgroundProcessor : NSObject
{
NSThread* processor;
}

@property (nonatomic) NSThread *processor;

-(void) Start;
-(void) Sleep;
-(void) workloop;
-(void) Resume;
@end

背景处理器.m

#import "BackgroundProcessor.h"

@implementation BackgroundProcessor
@synthesize processor;
-(id) init
{
self = [super init];
if(self)
{
processor = [[NSThread alloc] initWithTarget:self selector:@selector(workloop) object:nil];
}
return self;
}

-(void) Start
{
if(processor)
[processor start];
}

-(void) Sleep
{
// [processor
[NSThread sleepForTimeInterval: 0.1];
}

-(void) workloop
{
NSLog(@"Background Processor Processing ....");
[NSThread sleepForTimeInterval:0.1];
}

- (void) Resume
{
NSLog(@"Background Resuming ....");
[NSThread sleepForTimeInterval: 0.1];
}

我无法让工作循环持续运行。感谢是否有人可以帮助我解决背景问题

在 Joshua Smith 的建议下尝试了这个

#import "BackgroundProcessor.h"

@implementation BackgroundProcessor

-(id) init
{
self = [super init];
if(self)
{
queue = [[NSOperationQueue alloc] init];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(workloop) object:nil];
[queue addOperation:operation];
}
return self;
}

-(void) workloop
{

NSLog(@"Sleeping for 10 seconds");
sleep(10);
NSLog(@"Background Processor Processing ....");
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(workloop) object:nil];
[queue addOperation:operation];
}

@end

最佳答案

除非有某些特定原因,这必须是一个离散线程,否则我建议您使用 GCD 或 NSOperation Queue 来生产和使用工作线程。这种长时间运行的线程将成为 iOS 应用程序中的一个真正问题。

GCD 教程:

http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

关于iphone - 在 iOS 中创建一个连续的后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189066/

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