4. OC的兩個(gè)擴(kuò)展機(jī)制

category和associative是objective-c的兩個(gè)擴(kuò)展機(jī)制求类。

1.category(添加自定義方法)

#import “UIImageViewCategory.h”
 @interface UIImageView(UIImageViewCategory)
 -(void)extMethod矗晃;
@end

 #import “UIImageViewCategory.h”
 @implementation UIImageView(UIImageViewCategory)
 -(void)extMethod {
          .....
}
@end

2.associative(添加自定義屬性)
associative是一種發(fā)生在運(yùn)行時(shí)的對(duì)象關(guān)聯(lián)機(jī)制(引入objc/runtime.h),將一個(gè)對(duì)象關(guān)聯(lián)到另一對(duì)象鸵贬,通過一個(gè)關(guān)鍵字建立關(guān)聯(lián)脖捻,這個(gè)關(guān)鍵詞必須是唯一的,一般采用靜態(tài)字符串變量才作為關(guān)鍵字嗜浮。

associative機(jī)制共有3個(gè)方法摩疑,設(shè)置關(guān)聯(lián)對(duì)象、獲取關(guān)聯(lián)對(duì)象吉殃、刪除關(guān)聯(lián):

/*
 *源對(duì)象
 *關(guān)鍵字:靜態(tài)變量,可使用static const *NSString 或 staticchar
 *關(guān)聯(lián)的對(duì)象
 *關(guān)聯(lián)策略:assign蛋勺,retain鸠删,copy等協(xié)議
 */
OBJC_EXPORTvoid objc_setAssociatedObject(id object,constvoid *key,id value,objc_AssociationPolicy policy)
OBJC_EXPORTid objc_getAssociatedObject(id object,constvoid *key)
//Removes all associations for a given object.
OBJC_EXPORTvoid objc_removeAssociatedObjects(id object)
#import<UIKit/UIKit.h>
@interface UIImageView (UIImageViewbtnImage)
@property (nonatomic, strong) UIImageView *btnImageView;
@end

#import"UIImageViewbtnImage.h"
#import <objc/runtime.h>

static char kbtnImageView;
@implementation UIImageView (UIImageViewbtnImage)
// get
-(UIImageView *)btnImageView
{
  // return objc_getAssociatedObject(self, @selector(isClicked));
    return objc_getAssociatedObject(self, &kbtnImageView);
}


// set
-(void)setBtnImageView:(UIImageView *)btnImageView
{
    //如果是指針類型
    return objc_setAssociatedObject(self, &kbtnImageView, btnImageView, OBJC_ASSOCIATION_RETAIN);
    
    //1 源對(duì)象self
    //2 關(guān)鍵字 唯一靜態(tài)變量key isClicked
    //3 關(guān)聯(lián)的對(duì)象
    //4 關(guān)鍵策略  OBJC_ASSOCIATION_RETAIN_NONATOMIC
    //objc_setAssociatedObject(self, @selector(isClicked), @(isClicked), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
   
}
@end

Category的局限性
主要有兩方面局限性:

(1)無(wú)法向類中添加新的實(shí)例變量刃泡,類別沒有位置容納實(shí)例變量〖衣簦可以通過associative來(lái)解決

(2)名稱沖突庙楚,即當(dāng)類別中的方法與原始類方法名稱沖突時(shí),類別具有更高的優(yōu)先級(jí)酪捡。類別方法將完全取代初始方法從而無(wú)法再使用初始方法逛薇。這個(gè)類似于方法的重載疏虫,但是這里是直接覆蓋了原方法

類別的作用
類別主要有3個(gè)作用:
(1)可以將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中啤呼,方便代碼管理官扣。也可以對(duì)框架提供類的擴(kuò)展(因?yàn)榭蚣茴悰]有源碼羞福,不能修改)。

(2)創(chuàng)建對(duì)私有方法的前向引用:如果其他類中的方法未實(shí)現(xiàn)卖陵,在你訪問其他類的私有方法時(shí)編譯器報(bào)錯(cuò)這時(shí)使用類別张峰,在類別中聲明這些方法(不必提供方法實(shí)現(xiàn)),編譯器就不會(huì)再產(chǎn)生警告

(3)向?qū)ο筇砑臃钦絽f(xié)議:創(chuàng)建一個(gè)NSObject的類別稱為“創(chuàng)建一個(gè)非正式協(xié)議”鸥滨,因?yàn)榭梢宰鳛槿魏晤惖奈袑?duì)象使用谤祖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粥喜,一起剝皮案震驚了整個(gè)濱河市额湘,隨后出現(xiàn)的幾起案子旁舰,更是在濱河造成了極大的恐慌,老刑警劉巖毯焕,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纳猫,死亡現(xiàn)場(chǎng)離奇詭異竹捉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侵续,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乃沙,“玉大人诗舰,你說我怎么就攤上這事∈癫” “怎么了属百?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵族扰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我怒竿,道長(zhǎng)扩氢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任朦肘,我火速辦了婚禮媒抠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趴生。我一直安慰自己迟螺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布锉桑。 她就那樣靜靜地躺著民轴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪后裸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天浪谴,我揣著相機(jī)與錄音因苹,去河邊找鬼。 笑死凶杖,一個(gè)胖子當(dāng)著我的面吹牛款筑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杈湾,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼毛秘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阻课!你這毒婦竟也來(lái)了限煞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤署驻,失蹤者是張志新(化名)和其女友劉穎旺上,沒想到半個(gè)月后糖埋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡征候,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年疤坝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跑揉。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡历谍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出具练,到底是詐尸還是另有隱情,我是刑警寧澤扛点,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布陵究,位于F島的核電站奥帘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寨蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一秸苗、第九天 我趴在偏房一處隱蔽的房頂上張望惊楼。 院中可真熱鬧,春花似錦檀咙、人聲如沸璃诀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至年鸳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搔确,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工座硕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涕蜂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓蜘拉,卻偏偏與公主長(zhǎng)得像有鹿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子持寄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉稍味,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,732評(píng)論 0 9
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,168評(píng)論 30 470
  • 3仲闽、請(qǐng)說明一下objective-c中#import 僵朗、#include 及@class的區(qū)別验庙?#import<>...
    AlanGe閱讀 967評(píng)論 0 0
  • 307社牲、setValue:forKey和setObject:forKey的區(qū)別是什么? 答:1, setObjec...
    AlanGe閱讀 1,554評(píng)論 0 1
  • 蘋果官方文檔翻譯 《Objective-C語(yǔ)言編程》(Programming with Objective-C) ...
    fever105閱讀 25,710評(píng)論 19 130