文章标题

//1, 一个进程是由一个或多个线程组成,进程只负责资源的调度和分配, 线程才是程序真正的执行单元, 负责代码的执行;

2,每个正在运行的程序,至少包含一个线程,这个线程叫做主线程了;

3,主线程在程序启动的时候被创建,用于执行main函数;

4,只有一个主线程的程序,称作单线程程序;

5, 主线程负责执行程序的所有代码(UI的展现及刷新, 网络请求) 这些程序只能顺序执行,无法并发执行(一部分代码在执行的时候,下面的代码要等待上面部分执行完了才会执行, 如果上面的任务执行比较缓慢, 就会出现线程阻塞的情况);

6,iOS允许用户自己开辟新的线程, 相对于主线程来说,这些线程,称作子线程;

7, 子线程与主线程是独立运行的单元,互不影响,能够并发执行;(所以我们把容易阻塞线程的任务放到子线程里执行, 子线程在执行缓慢的任务的时候不会影响主线程的进行);

8, iOS中关于UI的刷新和添加必须在主线程里进行操作执行!!

//多线程创建
/**
NSThread 是一个轻量级的多线程 /
// 1,NSThread开启线程并自动执行

 [NSThread detachNewThreadSelector:@selector(printNumbers:) toTarget:self withObject:@"1111"];
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable id)argument;

这是一个类方法;

2, NSThread 创建初始化线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(printNumbers:) object:@"333"];
[thread start];

 - (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable id)argument;   

这是一个实例方法;
//这两种方式的区别: 第一种类方法会立即调用并执行线程;
第二种实例方法必须调用start方法后才会开始执行创建的线程,在此之前可以对线程进行一些设置,比如线程优先等级的设定等;
//使用类方法创建的线程不需要进行内存的清理,使用initWithTarget方法创建的线程需要释放内存; //两种方法最后的参数object一般都是nil;

3, 如果在viewDidLoad方法中使用self直接调用一个方法,走的是主线程 main;

NSOperationQueue 线程队列
// NSOperation是Cocoa中的一个抽象类,用来封装单个任务和代码执行一项操作,由于是抽象类,所以不能直接实例化使用,必须定义子类继承该抽象类来实现,比较常用的NSOperation的子类有NSInvocationOperation,另外,也可以自己继承NSOperation来实现线程的操作。

另外会使用到操作队列NSOperationQueue,它相当于一个线程队列或者可以叫做线程池,可以顺序执行队列中的操作,也可以设置队列中操作的优先级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值