NSOperation
NSInvocationOperation
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo) object:nil]; [op1 start];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1- %@", [NSThread currentThread]); }]; [op1 start];
@implementation XMGOperation - (void)main { NSLog(@"%s, %@", __func__,[NSThread currentThread]); } @end
GCD队列和NSOperationQueue对比
NSOperationQueue特点
自己创建
队列中会开启新线程
mainQueue
队列中不会开启新线程Invocation
// 1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.封装任务 NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo) object:nil]; // 3.将任务添加到队列中 [queue addOperation:op1];
// 1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.封装任务 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1 = %@", [NSThread currentThread]); }]; // 3.将任务添加到队列中 [queue addOperation:op1]; // 1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // addOperationWithBlock方法会做两件事情 // 1.根据传入的block, 创建一个NSBlockOperation对象 // 2.将内部创建好的NSBlockOperation对象, 添加到队列中 // 2.将任务添加到队列中 [queue addOperationWithBlock:^{ NSLog(@"1 = %@", [NSThread currentThread]); }]; [queue addOperationWithBlock:^{ NSLog(@"2 = %@", [NSThread currentThread]); }];
// 1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.封装任务 JXOperation *op1 = [[JXOperation alloc] init]; // 3.将任务添加到队列中 [queue addOperation:op1];
// 如果是YES, 代表需要暂停 // 如果是NO ,代表恢复执行 self.queue.suspended = YES;
// 内部会调用所有任务的cancel方法 [self.queue cancelAllOperations];
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 开启子线程 [queue addOperationWithBlock:^{ // 回到主线程 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ }]; }];
[operationB addDependency:operationA]; // 操作B依赖于操作A op1.completionBlock = ^{ NSLog(@"第一张图片下载完毕"); }; op2.completionBlock = ^{ NSLog(@"第二张图片下载完毕"); };
逻辑1 - 从来没下载过
1.查看内存缓存是否有图片
2.查看磁盘缓存是否有图片
3.查看时候有任务正在下载当前图片
4.开启任务下载图片
5.写入磁盘
6.缓存到内存
7.移除下载操作
8.显示图片
逻辑2 - 已经下载过
1.查看内存缓存是否有图片
2.查看磁盘缓存是否有图片
3.使用磁盘缓存
4.将图片缓存到内存中
5.更新UI
逻辑3 - 已经下载过, 并且不是重新启动
1.查看内存缓存是否有图片
2.更新UI
Documents
Caches
Preferences
tmp
封装获取文件路径方法
- (NSString *)cacheDir { // 1.获取cache目录 NSString *dir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; return [dir stringByAppendingPathComponent:[self lastPathComponent]]; } - (NSString *)documentDir { NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; return [dir stringByAppendingPathComponent:[self lastPathComponent]]; } - (NSString *)tmpDir { NSString *dir = NSTemporaryDirectory(); return [dir stringByAppendingPathComponent:[self lastPathComponent]]; }
SDWebImageManager
SDWebImage常见面试题
默认缓存时间多少
缓存的地址
cleanDisk如何清理过期图片
clearDisk如何清理磁盘
SDWebImage如何播放图片
SDWebImage如何判断图片类型
CocoaPods 是什么?
CocoaPods 背后的理念主要体现在两个方面
CocoaPods的原理
CocoaPods安装
卸载CocoaPods
CocoaPods使用:
platform :ios
pod‘AFNetworking‘
pod install --no-repo-update
pod update --no-repo-update
原文:http://www.cnblogs.com/fshmjl/p/4822391.html