ios线程

来源:互联网 发布:服装3d软件 编辑:程序博客网 时间:2024/05/21 08:58
@synchronized(self) {
   //code……只能被一个线程访问的代码
}

多线程实现方式:NSThread,  performSelector  ,   GCD  前两者属于过时。

多线程实现方式之一:最简单的performSelector  
- (IBAction)runInBack:(id)sender {
   
//开始多线程处理任务
    [
self performSelectorInBackground:@selector(doWork)withObject:nil];

    //此处用来说明主线程也在运行
   
for (int a = 0;a<1000;a++) {
       
NSLog([NSStringstringWithFormat:@"此处用来说明主线程也在运行------------%i",a]);
    }

}

- (
void)doWork {
   
for (int i=0;i<10000;i++) {
       
NSLog(@"多线程运行。。。。。%i",i);
       
       
//返回主线程刷新UI
        [
self performSelectorOnMainThread:@selector(doneWork:)withObject:
                            [
NSStringstringWithFormat:@"%i",i]waitUntilDone:NO];
    }
}

- (
void)doneWork:(NSString*)data {
   
self.noteLabel.text= [NSStringstringWithFormat:@"%@",data];
}


多线程实现方式之二:GCD
Dispatch Queue:两种
1.Serial Dispatch Queue 排队等待处理
2.Concurrent Dispatch Queue 直接处理,不等待。

    /*新建线程队列  Dispatch_queue 的几个方法*/
   
   
//获取系统标准Dispatch_queue----global dispatch queue,所有应用程度都能够使用的concurrent dispatch queue,有四个执行优先级(high,default, low ,background)队列中的任务将会比较顺序执行。
   
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
   
//获取系统标准Dispatch_queue----main dispatch queue,在主线程中执行的serial dispatch queue
   
dispatch_queue_t queue2 = dispatch_get_main_queue();
   
//新建Dispatch_queue----排队队列,先进先出
   
dispatch_queue_t queue3 = dispatch_queue_create("servial_queue2",DISPATCH_QUEUE_SERIAL);
   
//新建Dispatch_queue----分发队列,直接运行
   
dispatch_queue_t queue4 = dispatch_queue_create("concurrent_queue3",DISPATCH_QUEUE_CONCURRENT);

dispatch_set_target_queue:设置执行优先级
dispatch_after  在指定时间后追加到队列。
dispatch_group  所有处理完成后可以用来结束队列。
dispatch_barrier_async 如果在concurrent队列中使用文件操作或者数据库操作可能会出现数据竞争,所以在多个处理中某个引起竞争的任务只能单独执行,如下:分发到任务四时只能单独执行,再处理追加的任务。
dispatch_async(queue, ^{reading...});
dispatch_async(queue, ^{reading2...});
dispatch_async(queue, ^{reading3...});
dispatch_barrier_async(queue,^{writing4...});
dispatch_async(queue, ^{reading5...});
dispatch_async(queue, ^{reading6...});
dispatch_async(queue, ^{reading7...});

dispatch_suspend(queue1);/dispatch_resume(queue);  挂起和恢复队列。
Dispatch I/O 将文件分成几块分发读取

多线程实现方式之三:NSThread
0 0
原创粉丝点击