iOS在系统空闲时定期执行低优先级任务

时间:2017-11-02 03:00:24

标签: ios objective-c cocoa-touch runloop

在iOS App开发过程中。我想定期执行低优先级任务。并且不希望这个任务会影响主要的工作计划。实现它的方法是什么?

现在我使用timer执行定期任务,但经常发现应用程序不顺畅。

有时需要在主线程上运行低优先级任务,例如检查粘贴板,而不是在UI上显示内容。

1 个答案:

答案 0 :(得分:0)

你必须使用Blocks(完成处理程序),它是GCD的一部分。这将远离主线程。

创建一个名为“ backgroundClass ”的NSObject类。

.h文件中的

typedef void (^myBlock)(bool success, NSDictionary *dict);

@interface backgroundClass : NSObject

@property (nonatomic, strong)  myBlock completionHandler;

-(void)taskDo:(NSString *)userData block:(myBlock)compblock;
.m文件中的

-(void)taskDo:(NSString *)userData block:(myBlock)compblock{
  // your task here
// it will be performed in background, wont hang your UI. 
// once the task is done call "compBlock" 

compblock(True,@{@"":@""});
}
你的viewcontroller .m类中的

- (void)viewDidLoad {
    [super viewDidLoad];
backgroundClass *bgCall=[backgroundClass new];

 [bgCall taskDo:@"" block:^(bool success, NSDictionary *dict){
// this will be called after task done. it'll pass Dict and Success.    

dispatch_async(dispatch_get_main_queue(), ^{
 // write code here if you need to access main thread and change the UI.
// this will freeze your app a bit.
});

}];
}