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 :iospod'AFNetworking'
pod install --no-repo-updatepod update --no-repo-update
新闻热点
疑难解答