iOS中关于多线程的一些方法

来源:互联网 发布:网络视频广告价格表 编辑:程序博客网 时间:2024/05/01 09:28

OC里面, 程序的多线程执行是一个很重要的环节, 单线程的APP是不能满足用户体验的, 因为, 单线程的app过于单调, 并且运行多个程序的时候容易产生加载缓慢或者网络延迟的问题, 影响了用户体验肯定不是一个好的app, 所以我们要进行多线程的操作:


多线程分为三种类型:

1. NSThread:

初始化方法:

 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector( ) object:nil];//    [thread start];//    [thread release];
便利构造器:

[NSThread detachNewThreadSelector:@selector( ) toTarget:self withObject:nil];

2.NSobject:

//在后台运行

 [self performSelectorInBackground:@selector( ) withObject:nil];

3. (1)我们可以自定义一个NSOperation 来设置同步和并发

 Operation *operation = [[Operation alloc] init];    //[operation start];    Operation *operation2 = [[Operation alloc] init];            //添加子线程 并设置他们的同步和并发    //NSOperationQueue 线程队列 (会自动调用他的start方法)    NSOperationQueue *queue = [[NSOperationQueue alloc] init];        [queue setMaxConcurrentOperationCount:1];//限制最大的并发数(若为1为同步)        [queue addOperation:operation];    [queue addOperation:operation2];        [operation2 release];    [operation release];    [queue release];
    (2) 我们可以使用系统的多线程方法

 // NSBlockOperation
    NSBlockOperation *ope =[NSBlockOperation blockOperationWithBlock:^{        //block里面是多线程要执行的代码                }            }];        NSOperationQueue *queue = [[NSOperationQueue alloc] init];        [queue addOperation:ope];    [queue release];        
    //NSInvocationOperation        NSInvocationOperation *opera = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector( ) object:nil];           NSOperationQueue *queue = [[NSOperationQueue alloc] init];    [queue addOperation:opera];
     [queue release];


4.GCD

GCD使我们开发过程中最常用的多线程方法,GCD大致有两种方式: 同步和并发:

步骤: 创建一个同步队列, 把Block中的内容放入同步队列中, 然后把队列和主线程异步执行

dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);     //把block中的内容(多线程的代码)放入同步队列中, 然后把队列和主线程异步执行(因为是C语言不能写自动释放池)    dispatch_async(queue, ^{                    //显示到界面上, 所有根UI有关的内容全部都要在主线程上运行        dispatch_async(dispatch_get_main_queue(), ^{                    });    });}

GCD的并行队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{           });});}

0 0
原创粉丝点击