//网络
// ViewController.m并发
// Block使用注意async
//atom
// Created by renlei on 15/9/5.spa
// Copyright (c) 2015年 renlei. All rights reserved.队列
//内存
#import "ViewController.h"开发
@interface ViewController ()get
//定义一个全局的队列属性,方便在任何方法中均可以使用这个Queueit
@property (nonatomic,strong) NSOperationQueue *queue;
@end
//UI控件 用weak 和Strong 都没有问题
//在开发中,基本会见到全部的UI控件都是用strong
//UI控件通常不要用懒加载的方式加载,UI控件与用户是对应的,UI控件以外的,能用懒加载就用懒加载
@implementation ViewController
//懒加载
-(NSOperationQueue *)queue
{
if (!_queue) {
_queue = [[NSOperationQueue alloc]init];
//设置最大并发数
[_queue setMaxConcurrentOperationCount:6];
// 网络因素
}
return _queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//这里直接在bloc 中使用self 会形成循环引用.block使用的注意点之一:循环引用
//__weak type(self)wself = self;wself 就是self的弱引用写法
//GCD中的任务都是封装在block中,若是GCD中的block中出错了,self ,会形成循环引用吗?
// dispatch_async(dispatch_get_main_queue(), ^{
//
// [self test];
// }); 会形成循环引用吗> 不会形成循环引用,由于self对这个block 没有强引用
//建立操做
__weak typeof(self) wself = self;
NSBlockOperation *op = [NSBlockOperation
blockOperationWithBlock:^{
//block 中出现self.block 对self是强引用
[wself test];
}];
// 将操做添加到队列中.
// self.queue 对op 就是强引用
[self.queue addOperation:op];
}
//接收到内存警告的时候,就会调用
-(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//取消操做,有两个方法
// 1> 操做队列取消全部的操做
// 取消全部的操做,对于取消的操做,没法再次恢复
[self.queue cancelAllOperations];
// 2> 单个从左能够取消 NSOperation的方法
}
-(void)test1
{
// NSOperation 高级操做:暂停/恢复
// 这两个方法,通常用在与用户交互的时候
// 暂停队列中的全部操做
[self.queue setSuspended:YES];
// 恢复队列中的全部操做
[self.queue setSuspended:NO];
}
-(void)test
{
NSLog(@"=====%@",[NSThread currentThread]);
}
@end