天天看點

Objective-C中的分類(category)、擴充(extension)與協定(protocol)分類(category)擴充(extension)協定(protocol)

Objective-C中的分類與協定

  • 分類(category)
    • 繼承的局限性
    • 分類的定義
    • 分類的使用場景
    • 示例
  • 擴充(extension)
    • 擴充與分類的差別
  • 協定(protocol)
    • 遵從協定

Objective-C中有三個常見的進階功能。

分類(category)

繼承的局限性

說到類的擴充,最常見的方式可能就是繼承。但是有時你并不希望自己為某個類添加的行為僅僅作用于它的一個子類上,這時通過繼承的方式為已有類添加行為就顯得不那麼高效。在Objective-C的2.0版本中,為已有類添加新的行為可以通過category實作。不同于常用的繼承,category可以更加動态的添加這些行為,同時也能很好的解決這些更新僅僅生效于某一特定子類的情況。

分類的定義

分類是用來統一管理某些方法,協定,或屬性的集合。它可以為一個已有類添加執行個體方法,類方法,屬性,以及實作協定。但是,分類無法為已有類添加執行個體變量。

分類的使用場景

Apple官方給出的category的兩個使用場景是:

  • Distribute the implementation of your own classes into separate source files—for example, you could group the methods of a large class into several categories and put each category in a different file.
  • Declare private methods.

可見category本身可以将一個類,拆分為多個檔案,達到解耦的效果。

示例

擴充(extension)

擴充與分類的差別

協定(protocol)

遵從協定