麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

iOS多線程及其他補充02

2019-11-14 18:18:03
字體:
來源:轉載
供稿:網友
  • NSOperation

    • NSOperation是個抽象類,并不具備封裝操作的能力,必須使用它的子類
  • NSInvocationOperation

    • 如果直接執行NSInvocationOperation中的操作, 那么默認會在主線程中執行
    •  NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo) object:nil]; [op1 start];

       

  • NSBlockOperation
    • 如果只封裝了一個操作, 那么默認會在主線程中執行
    • 果封裝了多個操作, 那么除了第一個操作以外, 其它的操作會在子線程中執行
    • NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"1- %@", [NSThread currentThread]);    }];[op1 start];

       

  • 自定義Operation
      • @implementation XMGOperation- (void)main{    NSLog(@"%s, %@", __func__,[NSThread currentThread]);}@end

         

  • NSOperationQueue
  • GCD隊列和NSOperationQueue對比

    • GCD
      • 串行: 自己創建, 主隊列
      • 并發: 自己創建, 全局
      NSOperationQueue
      • 自己創建: alloc/init
      • 主隊列 : mainQueue
  • NSOperationQueue特點

    • 任務添加到自己創建隊列中會開啟新線程
      • 默認是并發: maxConcurrentOperationCount -1
      • 串行 : maxConcurrentOperationCount = 1
    • 任務添加到mainQueue隊列中不會開啟新線程
  • Invocation

      • // 1.創建隊列    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    // 2.封裝任務    NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo) object:nil];    // 3.將任務添加到隊列中    [queue addOperation:op1];

         

  • block
      • // 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(@"第二張圖片下載完畢");    };

         

  • 圖片下載
      • 重復下載問題
        • 定義字典保存下載好的圖片
      • 磁盤緩存問題
        • 內存沒有嘗試從磁盤獲取
      • 阻塞主線程問題
        • 新建NSOperationQueue下載圖片
      • 重復設置問題
        • reloadRowsAtIndexPaths
      邏輯1 - 從來沒下載過 1.查看內存緩存是否有圖片 2.查看磁盤緩存是否有圖片 3.查看時候有任務正在下載當前圖片 4.開啟任務下載圖片 5.寫入磁盤 6.緩存到內存 7.移除下載操作 8.顯示圖片 邏輯2 - 已經下載過 1.查看內存緩存是否有圖片 2.查看磁盤緩存是否有圖片 3.使用磁盤緩存 4.將圖片緩存到內存中 5.更新UI 邏輯3 - 已經下載過, 并且不是重新啟動  1.查看內存緩存是否有圖片  2.更新UI
  • 目錄結構
  • Documents

      • 需要保存由"應用程序本身"產生的文件或者數據,例如:游戲進度、涂鴉軟件的繪圖
      • 目錄中的文件會被自動保存在 iCloud
      • 注意:不要保存從網絡上下載的文件,否則會無法上架!
      • Caches

        • 保存臨時文件,"后續需要使用",例如:緩存圖片,離線數據(地圖數據)
        • 系統不會清理 cache 目錄中的文件
        • 就要求程序開發時,"必須提供 cache 目錄的清理解決方案"
      • PReferences

        • 用戶偏好,使用 NSUserDefault 直接讀寫!
        • 如果要想數據及時寫入磁盤,還需要調用一個同步方法
      • tmp

        • 保存臨時文件,"后續不需要使用"
        • tmp 目錄中的文件,系統會自動清理
        • 重新啟動手機,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]];}

         

    • SDWebImage架構
    • SDWebImageManager

      • SDImageCache
      • SDWebImageDownloader
        • SDWebImageDownloaderOperation
    • SDWebImage常見面試題

    • 默認緩存時間多少

      • 一周
    • 緩存的地址

      • NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
    • cleanDisk如何清理過期圖片

      • 刪除早于過期日期的文件
      • 保存文件屬性以計算磁盤緩存占用空間
      • 如果剩余磁盤緩存空間超出最大限額,再次執行清理操作,刪除最早的文件
    • clearDisk如何清理磁盤

      • 刪除緩存目錄
      • 新建緩存目錄
    • SDWebImage如何播放圖片

      • 取出gif中每一幀, 生成一張可動畫圖片
    • SDWebImage如何判斷圖片類型

      • 判斷圖片二進制前8個字節
      • kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};

    • CocoaPods 是什么?

      • CocoaPods 是開發 OS X 和 iOS 應用程序的一個第三方庫的依賴管理工具。利用 CocoaPods,可以定義自己的依賴關系 (稱作 pods),并且隨著時間的變化,以 及在整個開發環境中對第三方庫的版本管理非常方便
    • CocoaPods 背后的理念主要體現在兩個方面

      • 在工程中引入第三方代碼 會涉及到許多內容。針對 Objective-C 初級開發者來說,工程文件的配置會讓 人很沮喪
      • 在配置buildphases和linker flags過程中,會引起許多人為因素的 錯誤
      • CocoaPods 簡化了這一切,它能夠自動配置編譯選項
    • CocoaPods的原理

      • 它是將所有的依賴庫都放到另一個名為Pods項目中,然后 讓主項目依賴Pods項目,這樣,源碼管理工作都從主項目移到了Pods項目中
      • 1、Pods項目最終會編譯成一個名為libPods.a的文件,主項目只需要依賴這個.a 文件即可。
      • 2、對于資源文件,CocoaPods提供了一個名為Pods-resources.sh的bash腳本, 該腳本在每次項目編譯的時候都會執行,將第三方庫的各種資源文件復制到目 標目錄中。
      • 3、CocoaPods通過一個名為Pods.xcconfig的文件來在編譯時設置所有的依賴和 參數。
    platform :iospod'AFNetworking'
    • 注釋事項
      • 1.利用CocoPods管理類庫后, 以后打開項目就用xxxx.xcworkspace 打開,而不是 之前的.xcodeproj文件
      • 2.每次更改了Podfile文件,你需要重新執行一次pod update命令。
      • 3.CocoaPods在執行pod install和pod update時,會默認先更新一次CocoPods的 spec倉庫索引。使用--no-repo-update參數可以禁止其做索引更新操作
    pod install --no-repo-updatepod update --no-repo-update

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 72pao成人国产永久免费视频 | 日韩午夜片 | 蜜桃网站免费 | 国产99视频精品免视看9 | 亚洲精品欧美二区三区中文字幕 | 久久亚洲国产精品 | 国内精品久久久久影院不卡 | 91精品国产综合久久婷婷香 | 午夜影视一区二区 | 91 成人 | 久久精品艹 | av在线试看 | 成人午夜在线免费 | 久久综合爱 | 成人午夜天堂 | 人人做人人看 | 特黄一级小说 | 精品午夜影院 | 九九午夜 | av影片在线观看 | 国产亚洲欧美日韩高清 | 亚洲性生活免费视频 | 九色激情网 | japanese hot milf free av | 5a级毛片| 国产在线精品区 | 日韩美香港a一级毛片免费 欧美一级淫片007 | 亚洲码无人客一区二区三区 | 亚洲电影免费观看国语版 | 亚洲3p激情在线观看 | 黄色大片网站在线观看 | 91成人免费网站 | 欧美特级黄色 | 伦一区二区三区中文字幕v亚洲 | 最新午夜综合福利视频 | 性少妇videosexfreexx | 泰剧19禁啪啪无遮挡 | 日本欧美一区二区三区视频麻豆 | 日本不卡一二三区 | 法国性xxx精品hd | 亚洲视频成人在线 |