UI相關

TableView

  • tableview的cell高度自動判斷:

    • 以下function皆return UITableViewAutomaticDimension

      • func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

      • func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat


背景處理相關

GCD(Grand Central Dispatch)

  • Dispatch Queues,屬於底層的C API,又分為兩種:
    1.serial queues

    • main thread是系統所擁有的唯一serial queue

    • 一次只會執行一個任務

    • 一定要創建一個新的,否則會與main thread相沖

      • let queue = DispatchQueue(label: "requestData")

    2.concurrent queues

    • 不能保證執行順序

    • 系統提供四個Global Dispatch queues

      • DISPATCH_QUEUE_PRIORITY_HIGH
      • DISPATCH_QUEUE_PRIORITY_DEFAULT
      • DISPATCH_QUEUE_PRIORITY_BACKGROUND DISPATCH_QUEUE_PRIORITY_LOW
    • 可自行建立:let queue = dispatch_queue_create("QUEUE的唯一名稱", DISPATCH_QUEUE_CONCURRENT)

    • 可由系統取得:let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

  • 以上兩種的共通點

    • 任務皆FIFO,但看有無保證執行先後順序

Operation Queues

  • 默認情況下Operation Queues是concurrent的方式執行,但可藉由增加相依屬性讓他變成序列方式執行

  • 即NSOperationQueue,任務除了可以直接以block方式加入,還可以以NSOperation instance的方式被加入NSOperationQueue

  • NSOperation為抽象類別,因此必須使用他的子類別:

    • NSBlockOperation
      • 可包含多個block
      • 所有block被執行完才視為執行完畢
    • NSInvocationOperation
      • 僅包含一個block
      • 可用來呼叫指定的selector
  • 與GCD的差異

    • 不遵循FIFO
    • 可取消任務
      • 若任務已完成,則不會有影響
      • 若任務進行中,不會強制停止任務,而是將cancel屬性設為true
      • 若任務還在序列中,則之後不會被執行

results matching ""

    No results matching ""