本期内容主要包括
- NSOperationQueue(郑雨薇)
- ICMP协议分享(许云华)
- iOS ARC简介(许佳佳)
- spring框架(张辰)
- 设计模式之线程池模式(冯树勋)
- View绘制过程简介(江丁魁)
- 线程状态图(张艳强)
- 线程的使用(陈伟)
- 总结本期知识点
NSOperationQueue【操作队列】:用来存放操作的队列,据其优先级和准备情况执行排队的NSOperation对象。添加到操作队列后,操作将保留在其队列中,直到它报告已完成其任务。
NSOperationQueue操作队列中的任务的执行顺序受到任务的isReady【就绪状态】状态和任务的队列优先级影响。NSOperation操作有个isReady属性,该属性表示操作时否处于就绪状态,处于就绪状态的操作,只要等待系统调度,就会执行。而操作的就绪状态取决于依赖关系,当op1依赖于op2的时候,如果op2还没执行完,op1的isReady = NO,即op1还处于未就绪状态。同处于就绪状态的操作,此时再比较它们的队列优先级(queuePriority),这样才有意义。队列中会先执行处于就绪状态的操作,即便处于就绪状态的操作的队列优先级低于未就绪的操作。所以,要控制操作之间的执行顺序,需要使用依赖关系。
我们可以通过设置NSOperationQueue的最大并发操作数(maxConcurrentOperationCount)来控制任务执行是并发还是串行。
NSOperationQueue有两种不通类型的队列:主队列和自定义队列。主队列在主线程上运行,而自定义队列在后台执行。这两种队列中加入的任务都需要用NSOperation的子类来表示。
ARC的全称Auto Reference Counting. 也就是自动引用计数。 引用计数分为两种: 手动引用计数(MRC) 自动引用计数(ARC)
开发者要花大量时间在内存管理上,而且容易出现内存泄漏和release一个已被释放的对象,导致crash。
// MRC代码
NSObject * obj = [[NSObject alloc] init]; //引用计数为1
//不需要的时候
[obj release] //引用计数减1
//持有这个对象
[obj retain] //引用计数加1
//放到AutoReleasePool
[obj autorelease]//在auto release pool释放的时候,引用计数减1
使用ARC,开发者不再需要手动的retain/release/autorelease. 编译器会自动插入对应的代码,再结合Objective C的runtime,实现自动引用计数。 比如如下ARC代码:
NSObject * obj;
{
obj = [[NSObject alloc] init]; //引用计数为1
}
NSLog(@"%@",obj);
等同于如下MRC代码:
NSObject * obj;
{
obj = [[NSObject alloc] init]; //引用计数为1
[obj relrease]
}
NSLog(@"%@",obj);
__weak typeSelf(self) weakSelf = self;
[object fetchSomeFromRemote:^{
__strong typeSelf(weakSelf) strongSelf = weakSelf;
//从这里开始用strongSelf
}];
3、xcode循环引用检测
Worker Thread的所有参与者: 1,Client参与者,发送Request的参与者 2,Channel参与者,负责缓存Request的请求,初始化启动线程,分配工作线程 3,Worker参与者,具体执行Request的工作线程 4,Request参与者
将在Worker线程内部等待任务池非空的方式称为正向等待。 将在Channel线程提供Worker线程来判断任务池非空的方式称为反向等待。
实现方法: 1,利用同步方法来实现,使用数组来作为任务池的存放数据结构。在Channel有缓存请求方法和处理请求方法,利用生成者与消费者模式来处理存储请求,利用反向等待来判断任务池的非空状态。 2,利用同步块来处理,利用Vector来存储客户端请求。在Channel有缓存请求方法和处理请求方法,利用生成者与消费者模式来处理存储请求,利用正向等待来判断任务池的非空状态。
-
**新建状态(New) **: 线程对象被创建后,就进入了新建状态。
-
就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程
-
运行状态(Running) : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
-
**阻塞状态(Blocked) ** : 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
-
死亡状态(Dead) : 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
未收到文件,但是本期分享了该题目。
未收到内容
未收到内容
未收到内容
spring框架
当期分享了该框架内容,主要介绍了这个框架的作用,演示了如何启动一个简单的服务器,介绍了spring框架整个调用流程,中间包括了序列化如何使用等