IOS多线程的小总结

ios中多线程的实现方案有4种
    1.pthread :一套通用的多线程API/适用于Unix\Linux\Windows等系统 (跨平台可移植/使用难度大)    C语言    几乎不用
    2.NSThread :使用更加面向对象/简单易用,可直接操作线程对象          程序管理(线程生命周期)    OC语言    偶尔使用
    3.GCD     :旨在替代NSThread等多线程技术/充分利用设备的多核      自动管理            C语言    经常使用
    4.NSOperation:基于GCD(底层GCD)/比GCD多一些简单的使用功能/使用更加面向对象    自动管理       OC语言    经常

打印线程标志number ,主线程为1 :  [NSThread  currentThread]

3种方式创建线程   (新建的都是子线程)
    1>NSthread  oc   开发人员控制(管理)[线程的创建和销毁]    3中方法创建的线程执行@selelct(方法)   工作中很少用
        1>NSThread  *thread=[NSThread  alloc]initWithTarget:self  selector :@selector(add)  object:nil];       
        调用add方法
        必须调用   [thread  start];
            2.[self  perFormSelectorInBackGround:@select(add) withObject:nil]
        3.[NSThread  detachNewThreadSelector:@selelct(add) toTarget:self  withObject:nil]
    2>gcd       纯c   线程系统自动管理,充分利用多核技术        经常使用
    3>操作         基于gcd 的oc的实现方式              经常使用

线程同步,多线调用同一个方法(例add)在方法中加一把锁(锁对象,要求线程使用的都是同一把锁)
    加锁之后,就是当一个线程执行完之后再执行另外一个线程
    如不加锁,线程会随机(在缓存池中去找线程)调用
@synchronized(self)
{//加锁
    for(int i0;i<100;i++){
        NSLOg(@“%@”,[NSThread currentThread]);
    }
}//解锁

线程之间的通讯(交互,在新创建的子线程中调用方法,在方法中使用主线程去做一些事情,就产生了线程的通信)
    1.创建子线程[self performSelectorInBackground:@selector(downLoadImage) withObject:nil];调用downLoadImage方法
    2.在downLoadImage方法中使用主线程去下载图片[self performSelectorOnMainThread:@selector(displayPhoto:) withObject:img waitUntilDone:NO];
    3.在displayPhoto:方法中显示-(void)displayPhoto:(UIImage *)img     {self.photoView.image=img;}

gcd中有操作和队列两种方法,操作分为(同步和异步),队列分为(并发[一次执行多个block]和串行[一次只能一个block执行]).
常见搭配是:1.异步并发
       dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//获取全局并发队列
       异步操作:dispatch_async(queue, ^{   NSLog(@"%@",[NSThread currentThread]);   });
         2.异步+主队列
       dispatch_queue_t queue=dispatch_get_main_queue();//获取主队列
           异步操作:dispatch_async(queue, ^{   NSLog(@"%@",[NSThread currentThread]);  });
     3.异步+串行
       dispatch_queue_t queue=dispatch_queue_create("com", NULL);//创建了一个串行队列
       异步操作:dispatch_async(queue, ^{   NSLog(@"%@",[NSThread currentThread]);  });
     4.同步+并发
       dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//获取全局并发队列
       同步操作:dispatch_sync(queue, ^{   NSLog(@"%@",[NSThread currentThread]);  });

GCD通信(创建个全局并发/串行队列,在同步/异步队列中,创建主线程来显示)

NSOperation   NSOperationQueue *queue=[[NSOperationQueue alloc] init];
    添加依赖(就是设置 NSBlockOperation 创建多个b1,b2,b3)
       NSBlockOperation *b1=[NSBlockOperation blockOperationWithBlock:^{  NSLog(@"1"); }];
    [b3 addDependency:b2];   [b2 addDependency:b1];  只有当b1执行完执行b2  b1->b2->b3
    再一次将b1,b2,b3添加到 NSOperation上  queue addOperation:b1/b2/b3

通信和上边一样,在新创建的线程NSOperation中获取主线程操作

时间: 2024-11-06 19:47:00

IOS多线程的小总结的相关文章

iOS多线程开发小demo

首先演示一下主线程的阻塞 // DYFViewController.m // 623-01-阻塞多线程 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @end @implementation DYFViewCon

iOS多线程开发小demo5 线程间的通信

// DYFViewController.m // 623-06-线程间的通信 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImag

iOS多线程开发小demo7 GCD队列组

// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

iOS多线程开发小demo4,线程的同步问题

// DYFViewController.m // 623-05-线程同步问题 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (nonatomic, assign) int leftCount

iOS多线程开发小demo2,NSThread篇

用NSThread创建子线程的3种方法 // DYFViewController.m // 623-02-pthread // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" #import <pthread.h> @interface DYFViewController

iOS多线程开发小demo6 GCD

// DYFViewController.m // 623-07-GCD // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

iOS多线程开发小demo3,线程的状态

// Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (nonatomic, strong) NSThread *thread; @end @implementation DYFViewController

iOS多线程编程

1. 进程,线程, 任务 进程:一个程序在运行时,系统会为其分配一个进程,用以管理他的一些资源. 线程:进程内所包含的一个或多个执行单元称为线程,线程一般情况下不持有资源,但可以使用其所在进程的资源. 任务:进程或线程中要做的事情. 在引入线程的操作系统中,通常把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位. 线程比进程更小,对其调度的开销小,能够提高系统内多个任务的并发执行程度. 一个程序至少有一个进程,一个进程至少有一个线程.一个程序就是一个进程,而一个程序中的多个任

【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习. 一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.正巧自己的上线App Store的小游戏<跑酷好基友>(https://itunes.apple.com/us/app/pao-k