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