多线程总结

 

多线程-----充分发挥多核处理器的优势

 

 

selector:选择器  perform:执行 detach:派遣

Invocation:调用 dependency:依赖 application:应用

进程-应用程序,负责开辟一块内存区域,共应用程序执行,每一个进程都默认有一个主线程

线程-要执行的任务流

什么是多线程:1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。

线程中的串行:1个线程中任务的执行是串行的。

-----NSThred-------

-NSThred  每个对象是个线程 真正的多线层 /线程

 

-----NSOperation-------

英语:Operation:操作Queue:队列

-NSOperation/NSOperationQueue 面向对象的线程技术

  ios2.0后就有了

NSOperation有两个子类 NSInvocationOperation/NSBlockOpration

//操作步骤

新建一个队列-》队列添加线程(addOperationWithBlock)

//将线程添加到主队列

[NSOperationQueue mainQueue]addOperationWithBlock

//制定最大线程数

队列.maxConcurrentOperationCount=2

 

 

-----GCD-------

    //英语:Grand:最重要的 Central:核心的 Dispatch:派遣

     global:全局 async:异步 sync:同步

//-GCD-Grand Central Dispatch  ios4.0后出的GCD  C语言框架

使用步骤  (写代码都是Dispatch开头的)

1/全局队列 (可能开启多条线程)

   建队列--》建立异步/同步执行Block里面写(可并行执行几个顺序无先后,可在主队列中执行)

//创建队列 

dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//将异步线程添加到队列

dispatch_async(queue, ^{

    [self GCDWithMessage:@"huohuo"];

});

//将线程添加到群组,后统一得到通知

创建群组-》将线程添加到群组-》获得通知

dispatch_group_t group=dispatch_group_creat()

dispatch_group_notify(group,queue,^){}

//利用GCD实现图片的内存缓存技术,

//内存缓存,就是再次运行时,需从网络上从新下载图像(例如:装进了数组)

//磁盘缓存:将数据写进沙盒,缺点如果网络上的图片变化了,可能无法及时更新,所以使用磁盘缓存是需要更多的网络缓存技术。

//第三方框架 SDY Image 解决缓存问题的第三方框架

 

   //主线程不能写同步(sync)

 

2/串行队列 (只可能开启一条线程)

  为决绝线程执行顺序的问题

dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);

 

  串行队列是creat的 建队列——》添加队列

3/更新UI界面的操作在主队列里面做

dispatch_async(dispatch_get_main_queue(), ^{

    [self addMessage:str];//更新UI

});

4/主队列

dispatch_get_main_queue();

 

 

 

instance:实例

-------单例模式-------

1:定义:保证内存中只有类的单个实例,在一个类中,怎么创建只有一个实例化对象

1.0:单例操作步骤

创建静态变量-》在allocWithZone方法里面用GCD 包装实例化对象-》编写share方法以便管理

1.1:在类方法里面,想使用成员变量,static 定义

 

 

+ allcWithZone:(struct _NSZone *)zone

{

  1.2://这种方法只支持在单线程里面使用

//   if (_instance=nil)

//       _instance=[super allcWithZone];

    

  1.3://这种方法只支持在多线程里面使用 dispatch_once_t GCD为决绝多线程单例问题提供的

       

       static dispatch_once_t onceToken;

    dispatch_once(&onceToken,^){

        _instance=[super allcWithZone];

        });

 

    return _instance;

}

-------互斥锁的使用原则------

synchronize:使同时发生

1:被抢夺的属性要为原子属性(atomic)

2:读取原子属性的代码处,使用互斥锁

//保证一个人进一次

ps:用互斥锁严重影响系统性能,日常少用

@synchronized(self){}互斥锁

 

posted @ 2016-04-15 10:33  看谷秀  阅读(167)  评论(0编辑  收藏  举报