线程管理四种方法

进程:程序在计算机的一次运行活动,一个程序就是一个进程,在iOS中一个app就是一个进程

线程:程序运行的最小单元,一个进程中至少有一个线程(主线程)

一. 通过NSObject的方法管理线程

这种方法会帮助我们自己主动开辟一个后台线程,不须要自己创建

參数:(1)在这个后台线程中运行的方法

參数:(2)用于传递參数,没有为nil

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

}

二.通过NSTread方法管理线程

參数:(1)方法的运行者,(2)在线程中的运行的方法,(3)用于传递參数,没有为nil

1.创建线程

NSThread *thread = [[NSThread
alloc]
initWithTarget:self
selector:@selector(banZhuanPlus)
object:nil];

2.运行

[thread start];

[thread release];

三.通过NSOperationQueue方法管理线程

NSOperation是操作单元,用来运行方法,是一个抽象类,必须子类化或者使用系统创建好的子类:如NSInvocationOperation,NSBlockOperation

NSOperation,是最小的操作单元,仅仅能运行一次

第一步,创建操作单元(两种方法)

1.1  NSInvocationOperation *invocation = [[NSInvocationOperation
alloc]
initWithTarget:self
selector:@selector(banZhuanPlus)
object:nil];  1.2  NSBlockOperation
*block = [NSBlockOperation
blockOperationWithBlock:^{

主线程中运行

[self
banZhuanPlus];

}];

2.创建队列

队列会自己主动创建一个辅助的线程;

队列里面能加入?NSOperation及子类的对象

NSOperationQueue *queue = [[NSOperationQueue
alloc]
init];

最大并行数设置,同一时候运行几个操作单元

[queue setMaxConcurrentOperationCount:1];

3.运行,仅仅要把操作单元加入?到队列中,它就会运行

[queue addOperation:block];

[queue addOperation:invocation];

四.通过GCD方法管理线程

GCD:Grand Central Dispatch,大中央调度,是Apple推崇的多线程管理策略,是通过队列对多线程进行管理

1.创建队列(三种方法)

第一种队列

dispatch_queue_t mainQueue =
dispatch_get_main_queue();//主调队列,在主线程中运行,而且是串行(一次操作一个)

另外一种队列

全局队列,在子线程中运行,而且是并行(一次能够运行多个);

參数:(1)设置队列的优先级(high, default,low,background);(2)预留參数,未来使用

dispatch_queue_t globalQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0);

第三种队列

自己定义队列,在子线程中运行,能够设置并行或者串行

參数:(1)区分队列的唯一标识可选项,假设不写:NULL;假设写,规范样例”com.example.myqueue".

參数:(2)设置并行或者串行的

并行 :DISPATCH_QUEUE_CONCURRENT;

串行:DISPATCH_QUEUE_SERIAL(or NULL)

dispatch_queue_t customQueue =
dispatch_queue_create("com.example.myqueue",
DISPATCH_QUEUE_CONCURRENT);

2.运行(三种方法)

第一种,同步运行(须要等待运行完成)

參数:(1)指定队列,(2)Block,运行的操作

dispatch_sync(globalQueue, ^{

[self banZhuanPlus];//运行的操作

});

另外一种,异步运行(无需等待)

dispatch_async(globalQueue, ^{

[self
banZhuanPlus];//运行的操作

});

第三种,延迟运行

參数:(1)要延迟运行的时间,(2)//运行的操作

dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(2 *
NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{

[self
banZhuanPlus];

});

五.线程中注意点

第一,假设是在MRC模式下,线程中的autorelease对象不能释放,必须手动释放,或者加入?自己主动释放池

第二,子线程中刷新UI可能会失败(在子线程中不要刷新UI,即改变此UI的设置与属性)

时间: 2024-10-05 04:58:22

线程管理四种方法的相关文章

自学Linux命令的四种方法

自学Linux命令的四种方法 导读 童鞋们刚接触linux时,在学习过程中中会遇到不少问题,学习linux摸不着头脑,那么下面介绍四种linux的学习方法,特别适合新手. 方法一:终端"每日提示" 在.bashrc中(/home/.bashrc)增加如下一行: echo "Did you know that:"; whatis$(ls /bin | shuf -n 1) 你只需要增加这行就够了!如果你想让它更娱乐化一些,你可以安装cowsay.Ubuntu/Debi

windows线程池四种情形(win核心读书笔记)

windows线程池四种情形(win核心读书笔记) Mircosoft从Windows2000引入线程池API,并在Vista后对线程池重新构架,引入新的线程池API.以下所有线程池函数均适用于Vista以后的版本. 用Windows提供的线程池函数有以下几个好处:1,不必要用CreateThread创建线程:2,不必要管理自己线程:3,Windows封装好的线程池,效率高,性能优越. 1 异步方式调用函数 这种方式和我们用CreateThread创建线程的用法差不多,给定一个线程函数模板实现功

android 定位一般有四种方法

android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位,                             (1)Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块(现在大部分的智能机应该都有了).通过GPS方式准确度是最高的,但是它的缺点也非常明显:1,比较耗电:2,绝大部分用户默认不开启GPS模块:3,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间:4,室内几乎无法使用.

JAVA实现单例模式的四种方法和一些特点

JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下 一.饿汉式单例类 复制代码 代码如下: public class Singleton  {      private Singleton(){ } private static Singleton instance = new Singleton(); private static Singleton getInstance(){          return instance;      }  } 特点:饿汉式提前实例化,没有

Java多线程(4)----线程的四种状态

与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂起和唤醒线程 6 public void resume( ); // 不建议使用 7 public void suspend( ); // 不建议使用 8 public static v

Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac

C#连接Oracle数据库的四种方法

C#连接数据库的四种方法 在进行以下连接数据库之前,请先在本地安装好Oracle Client,同时本次测试System.Data的版本为:2.0.0.0. 在安装Oracle Client上请注意,如果OS是3-BIT请安装32-BIT的Oracle Client,但OS是64-BIT,需要根据实际情况安装,如果你的APP是按32-BIT运行的,则需要安装32-BIT客户端,如果是按64位运行的,则安装64位客户端,而不是OS是64-BIT的,就要安装64-BIT的ORACLE客户端.   本

iOS设置圆角的四种方法

一.设置CALayer的cornerRadius cornerRadius属性影响layer显示的background颜色和前景框border,对layer的contents不起作用.故一个imgView(类型为UIImageView)的image不为空,设置imgView.layer的cornerRadius,是看不出显示圆角效果的,因为image是imgView.layer的contents部分. 这种情况下将layer的masksToBounds属性设置为YES,可以正确的绘制出圆角效果.

linux安装IPython四种方法

IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPython会列出zlib模块下所有的属性.方法和类.完全可以取代自带的bash 下面介绍下linux安装IPython四种方法: 第一种:ipython源码安装ipython的源码下载页面为:https://pypi.python.org/pypi/ipython 或者是到git页面下载:https://g