當我們使用類別category有時候想自己增加一些屬性蔑水,平常的做法辦不到,又不想用繼承類,耦合度太高曙砂,這時候runtime的強大之處就體現(xiàn)出來啦艇拍。廢話不多說上代碼
寫了一個UIView的category狐蜕,UIView+MyView。在h文件添加兩個屬性卸夕,在m文件實現(xiàn)setter和getter方法馏鹤。關(guān)鍵在setter和getter方法。
首先要使用runtime的方法娇哆,先導(dǎo)入頭文件#import<objc/runtime.h>。
先說setter方法勃救,使用到了objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)碍讨。有四個參數(shù)
第一個<#id object#>是要添加屬性的對象,這里就是自己self
第二個<#const void *key#>關(guān)鍵字選擇器蒙秒,就是通過這個關(guān)鍵字的方法找到對象的哪個屬勃黍,就是給這個對象綁定一個對應(yīng)的key字段,常用一個static字符串常量晕讲,或者用@selector(屬性名)也行
第三個<#id value#>值覆获,就是給屬性設(shè)置你想設(shè)置的值
第四個<#objc_AssociationPolicy policy#>策略,屬性的關(guān)聯(lián)策略瓢省,retain還是assign
再說getter方法弄息,objc_getAssociatedObject(<#id object#>, <#const void *key#>)。有兩個參數(shù)
第一個<#id object#>是要添加屬性的對象勤婚,這里就是自己self
第二個<#const void *key#>關(guān)鍵字選擇器摹量,就是通過這個關(guān)鍵字的方法找到對象的哪個屬,要和objc_setAssociatedObject設(shè)置的綁定的key對應(yīng)馒胆。
注意缨称,第二個關(guān)鍵字可傳 _cmd,代表方法名本身。每一個方法內(nèi)都有一個_cmd祝迂,表示方法自身睦尽。