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
|
新聞熱點
疑難解答