iOS периодически выполняет задачу с низким приоритетом, пока система находится в режиме ожидания

В процессе разработки приложения для iOS. Я хочу периодически выполнять задачи с низким приоритетом. И не хочу, чтобы это задание повлияло на основную программу работы. Как это сделать?

Теперь я использую timer для выполнения периодических задач, но часто найти приложение не гладко.

Задача с низким приоритетом иногда должна выполняться в главном потоке, например, проверять монтажную панель, а не отображать содержимое в пользовательском интерфейсе.

1 ответ

Для этого вам придется использовать блоки (обработчики завершения), это часть GCD. Это будет держаться подальше от основного потока.

Создайте класс NSObject с именем "backgroundClass".

в.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.
});

}];
}
Другие вопросы по тегам