标签:
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong) NSOperationQueue *queue;
// UI 控件用 weak 和 Strong 都没有问题.
// 在开发中,基本会见到所有的UI控件都是用 Strong来做的.
// UI控件一般不要用懒加载的方式加载.UI控件与用户是对应的.UI控件之外的,能用懒加载就用懒加载.
@property (nonatomic,strong) UIButton *button;
@end
@implementation ViewController
-(NSOperationQueue *)queue
{
if (!_queue) {
_queue = [[NSOperationQueue alloc] init];
// 设置最大并发数.最多同时只能开启6条线程.
[_queue setMaxConcurrentOperationCount:6];
// 网络因素:
}
return _queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// __weak typeof(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
标签:
原文地址:http://www.cnblogs.com/liyang1991/p/4784220.html