UI Thread
2016-04-08 15:27
501 查看
原文地址:Thread">UI Thread作者:我不是怕忘了吗NSThread
创建线程的几种方法:
1NSThread:
优点:NSThread 比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步,加锁。
Cocoa operation 其子类 NSOperation ,
NSOperationQueue,
NSOperation:抽象类,使用它必须用它的子类
包括:NSlnvocationOperation,NSBlockOperation,及自定义的NSOperation
NSOperationQueue:操作队列,用来管理和控制NSOperation
包含主队列和并发队列。
#import "ViewController.h"
#import "CustomOperation.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do
any additional setup after loading the view, typically from a
nib.
//创建并发任务队列 并发不一定是并行
NSOperationQueue *queue = [[NSOperationQueue alloc]
init];//这是操作队列的创建方式,是一个具体的方法
//设定队列的最大并发数
queue.maxConcurrentOperationCount = 1;
queue.suspended = YES;//指当前线程挂起,然后等属性设置为NO才开始进行代码操作
//1.向队列中添加一个新任务,任务是所有代码都在block块中
[queue
addOperationWithBlock:^{
for (NSInteger i = 0; i <
10; i++) {
NSLog(@"Operation1---%li", i);
}
}];
//2.NSBlockOperation创建一个任务
NSBlockOperation *blockOperation = [NSBlockOperation
blockOperationWithBlock:^{
for (NSInteger i = 0; i <
10; i++) {
NSLog(@"Operation2---%li", i);
}
}];
//任务执行完毕回调的block
blockOperation.completionBlock = ^{
NSLog(@"NSBlockOperation任务执行完毕");
};
//3.NSInvocationOperation创建一个任务
NSInvocationOperation *invocationOper = [[NSInvocationOperation
alloc] initWithTarget:self selector:@selector(threadMethod:)
object:@"第三个operation"];
//4.自定义任务类
CustomOperation *customOper = [[CustomOperation alloc]
init];
//任务的优先级别只能影响当前队列中还未执行的任务,如果此任务已经开始执行,则不会影响其执行顺序。
customOper.queuePriority = NSOperationQueuePriorityHigh;
//blockOperation必须依赖invocationOperation执行,即invocationOper执行完毕blockOperation才能够执行。
[blockOperation addDependency:invocationOper];
//把任务添加到并发队列中执行,四个任务并发执行
[queue
addOperation:blockOperation];
[queue
addOperation:invocationOper];
[queue
addOperation:customOper];
queue.suspended = NO;
}
- (void)threadMethod:(NSString *)object
{
for
(NSInteger i = 0; i < 10; i++) {
NSLog(@"Operation3---%li",
i);
}
}
图片的异步加载
创建线程的几种方法:
1NSThread:
优点:NSThread 比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步,加锁。
Cocoa operation 其子类 NSOperation ,
NSOperationQueue,
NSOperation:抽象类,使用它必须用它的子类
包括:NSlnvocationOperation,NSBlockOperation,及自定义的NSOperation
NSOperationQueue:操作队列,用来管理和控制NSOperation
包含主队列和并发队列。
#import "ViewController.h"
#import "CustomOperation.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do
any additional setup after loading the view, typically from a
nib.
//创建并发任务队列 并发不一定是并行
NSOperationQueue *queue = [[NSOperationQueue alloc]
init];//这是操作队列的创建方式,是一个具体的方法
//设定队列的最大并发数
queue.maxConcurrentOperationCount = 1;
queue.suspended = YES;//指当前线程挂起,然后等属性设置为NO才开始进行代码操作
//1.向队列中添加一个新任务,任务是所有代码都在block块中
[queue
addOperationWithBlock:^{
for (NSInteger i = 0; i <
10; i++) {
NSLog(@"Operation1---%li", i);
}
}];
//2.NSBlockOperation创建一个任务
NSBlockOperation *blockOperation = [NSBlockOperation
blockOperationWithBlock:^{
for (NSInteger i = 0; i <
10; i++) {
NSLog(@"Operation2---%li", i);
}
}];
//任务执行完毕回调的block
blockOperation.completionBlock = ^{
NSLog(@"NSBlockOperation任务执行完毕");
};
//3.NSInvocationOperation创建一个任务
NSInvocationOperation *invocationOper = [[NSInvocationOperation
alloc] initWithTarget:self selector:@selector(threadMethod:)
object:@"第三个operation"];
//4.自定义任务类
CustomOperation *customOper = [[CustomOperation alloc]
init];
//任务的优先级别只能影响当前队列中还未执行的任务,如果此任务已经开始执行,则不会影响其执行顺序。
customOper.queuePriority = NSOperationQueuePriorityHigh;
//blockOperation必须依赖invocationOperation执行,即invocationOper执行完毕blockOperation才能够执行。
[blockOperation addDependency:invocationOper];
//把任务添加到并发队列中执行,四个任务并发执行
[queue
addOperation:blockOperation];
[queue
addOperation:invocationOper];
[queue
addOperation:customOper];
queue.suspended = NO;
}
- (void)threadMethod:(NSString *)object
{
for
(NSInteger i = 0; i < 10; i++) {
NSLog(@"Operation3---%li",
i);
}
}
图片的异步加载
相关文章推荐
- UICoreAnimation(5):CATransition&amp;…
- UI单例类的设计,GCD的图片加载
- UIGCD的用法,组任务
- UI触摸手势,事件的分发传递
- UI: didReceiveMemoryWarning…
- Ui:响应者链,手势,摇动事件
- UI:音频播放,桥接,相片和照片处…
- UICoreAnimation(2):Calayer…
- SwipeRefreshLayout,设置setRefreshing(true)没效果的解决方案
- UI进栈出栈原理
- UICoreAnimation基础
- UICoreAnimation(3):核心动…
- UICoreAnimation(4):核心动…
- UICoreAnimation(4):核心动…
- UI多线程(1)并行和并发的…
- UIAlertController的使用方…
- UItransframe属性(形变)
- iOS UIBezierPath--贝塞尔曲线
- Bluetooth 4.0之Android 讲解
- request - getParameter()和getAttribute()的区别