分類(category)與類擴展(extension)

分類(category):
作用:
1.在不改變原來類的基礎上,為該類增加方法
2.理論上不可以在分類中為該類增加成員變量(可以通過其他方法,請往下看)

PS: 在分類中,可以正常訪問原本類中的成員變量,方法等

分類的創(chuàng)建流程:


1.png
2.png

3.png

就創(chuàng)建好分類(category)了.

然后

  1. 先在分類中給原本類 添加一個對象方法吧
4.png

然后實現(xiàn)下吧

5.png

好了, 以上就是給一個label 添加一個分類. 分類中又給本類增加了一個計算label寬度的方法

下面 下面說一下 在分類中 為本類增加屬性的操作流程
唉唉唉? 不是說分類中不能改變本類么 so… 請往下看


6.png

然后進入到.m文件中, 編譯器會報警告, 說你需要實現(xiàn)這個屬性的setter 和getter 方法. 如圖->


7.png

好了, 接下來, 那就實現(xiàn)下setter 和 getter 方法咯


8.png

ok . 再來說下 runtime 這個關聯(lián)屬性的方法. (據說也是 setKey: value: 的底層實現(xiàn)? —— 臨時想到的 錯了求指教)
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy)
object : 關聯(lián)的主體(也就是目標)
key : 關聯(lián)的主題對應的鍵值( 全局唯一)
value : 要關聯(lián)的對象的值
policy : 協(xié)議方式, 是一個枚舉. 這里不詳解. 一般選用 objc_AssociationPolicy_RETAIN_NONATOMIC

補充一下 截圖里 是模仿的 FDTemplateLayoutCell 對這個方法使用方式

-------------------------------------- -------------------------------------- -------------------------------------- ———————————————————

再來說說 類擴展(extension)
類擴展相對使用的就很頻繁,也很平常了.

先上一張圖


9.png

相信大家都知道怎么用. 容小弟再復述一下

  1. 類擴展可以寫在.h文件中也可以寫在.m文件中
  2. 類擴展在.m中, 增加的屬性,方法都是為私有屬性,方法.
  3. 類擴展在.h中,增加的屬性,方法都是public的
  4. 聲明的方法都是需要實現(xiàn)的
10.png

好了,以上就是本次小弟的總結. 希望各位大大能夠幫忙擴充. 小弟感激不盡!~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容