亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品成人在线| 成人黄色片网站| 欧美精品在线免费观看| 九九精品在线播放| 日韩欧美亚洲成人| 98精品国产自产在线观看| 国产一区二区欧美日韩| 欧美孕妇孕交黑巨大网站| 久久国产一区二区三区| 国产+成+人+亚洲欧洲| 亚洲国产天堂网精品网站| 国产精品成人一区二区| 亚洲人午夜精品免费| 日韩av男人的天堂| 亚洲影院色无极综合| 欧美裸体xxxx| xvideos亚洲| 在线亚洲男人天堂| 中文字幕无线精品亚洲乱码一区| 麻豆国产精品va在线观看不卡| 51久久精品夜色国产麻豆| 不卡av日日日| 国产欧美日韩高清| 欧美一区二区三区免费观看| 51精品国产黑色丝袜高跟鞋| 欧洲成人午夜免费大片| 亚洲国产精品yw在线观看| 国产三级精品网站| 在线播放日韩欧美| 欧美一区二区三区四区在线| 国产精品网红福利| 久久精品亚洲精品| 青青青国产精品一区二区| 亚洲欧美另类在线观看| 在线播放国产一区二区三区| 色综合久久精品亚洲国产| 久久久最新网址| 亚洲一区二区三区四区视频| 成人性生交大片免费看视频直播| 欧美电影免费观看高清| 国产日本欧美一区| 欧美肥老太性生活视频| 96sao精品视频在线观看| 欧美激情亚洲精品| 中文字幕视频一区二区在线有码| 色午夜这里只有精品| 日韩中文字幕网| 欧美黄色片在线观看| 日韩av电影在线免费播放| 91精品视频免费| 国产精品极品美女在线观看免费| 日韩乱码在线视频| 久久在线免费观看视频| 国产91免费看片| 亚洲mm色国产网站| 国产欧美日韩精品丝袜高跟鞋| 国产美女久久精品香蕉69| 国产日韩欧美一二三区| 一本色道久久88综合日韩精品| 国产69精品久久久久久| 成人在线免费观看视视频| 欧美成人剧情片在线观看| 日韩激情在线视频| 国产视频自拍一区| 久久躁日日躁aaaaxxxx| 精品国产91久久久| 久久精品国产成人精品| 成人激情在线播放| 日韩av免费网站| 97视频在线观看网址| 久久久久久久久久久av| 91免费精品视频| 伊人男人综合视频网| 日韩精品中文字幕在线| 国产精品日韩欧美大师| 亚洲国产精品一区二区久| 亚洲国产天堂网精品网站| 亚洲国产精品va在线看黑人| 亚洲第一中文字幕在线观看| 大胆人体色综合| 亚洲美女av在线| 欧美极品少妇全裸体| 日韩一区二区在线视频| 91高清视频免费| 国产精品自产拍在线观| 国产精品揄拍一区二区| 欧美三级免费观看| 中文在线资源观看视频网站免费不卡| 久久久国产精品一区| 亚洲综合在线做性| 国产精品亚洲欧美导航| 九九视频这里只有精品| 激情久久av一区av二区av三区| 亚洲一区二区三区四区在线播放| 久久国产加勒比精品无码| 欧美专区在线观看| 久久久99免费视频| 久久99青青精品免费观看| 国产精品www| 在线播放日韩欧美| 日韩在线观看免费网站| 一区二区欧美亚洲| 色综合久久久久久中文网| 亚洲国产精品久久久久秋霞蜜臀| 亚洲石原莉奈一区二区在线观看| 国产成人精品视频在线| 亚洲性线免费观看视频成熟| 欧美电影在线观看完整版| 欧美成人亚洲成人| 国产精品久久久久久久久久三级| 精品欧美一区二区三区| 亚洲国产精品成人va在线观看| 日韩av综合网| 91国产精品91| 在线播放日韩av| 成人免费xxxxx在线观看| 91久久综合亚洲鲁鲁五月天| 欧美资源在线观看| 久久久久国产精品www| 欧美日韩亚洲国产一区| 欧美精品国产精品日韩精品| 国产精品久久9| 国产香蕉97碰碰久久人人| 欧美精品在线网站| 亚洲国产精品va在线看黑人| 国产精品久久久久久久av大片| 日韩久久精品电影| 日韩欧美在线网址| 日韩av三级在线观看| 97在线观看免费| 日韩美女视频中文字幕| 亚洲直播在线一区| 国产精品久久激情| 久久久免费精品| 欧美日韩福利在线观看| 久久99精品国产99久久6尤物| 91色视频在线观看| 成人国产精品久久久久久亚洲| 欧美性猛交xxxx免费看漫画| 成人a视频在线观看| 亚洲成成品网站| 国内精品久久久久伊人av| 国模视频一区二区三区| 成人啪啪免费看| 国内精品中文字幕| 国产成人精品日本亚洲专区61| 久久网福利资源网站| 日韩国产中文字幕| 欧美成人一区二区三区电影| 亚洲一区二区自拍| 这里只有精品在线播放| 欧美xxxx做受欧美.88| 精品久久久国产| 国产有码在线一区二区视频| 亚洲精品视频在线观看视频| 欧美激情伊人电影| 一本色道久久88精品综合| 国产午夜精品免费一区二区三区| zzjj国产精品一区二区| 成人亚洲激情网| 国产精品高潮视频| 欧美制服第一页| 亚洲欧美综合另类中字| 亚洲专区中文字幕|