在分類(lèi)當(dāng)中定義屬性的方法

分類(lèi)不能定義屬性只能定義方法 , 是因?yàn)閷?duì)象創(chuàng)建的過(guò)程中已經(jīng)alloc過(guò)了,你這個(gè)對(duì)象有多少屬性已經(jīng)固定了不能在改變了,而方法與屬性的區(qū)別在于方法是一個(gè)二級(jí)鏈表 , 他可以到運(yùn)行時(shí)再去決定方法列表的最終情況所以分類(lèi)當(dāng)中不能定義屬性卻可以定義方法,就是因?yàn)橛辛诉\(yùn)行時(shí)的存在 , 所以這里就可以同樣用運(yùn)行時(shí)的處理辦法讓屬性列表的最終確定推遲到運(yùn)行時(shí)再去決定!這個(gè)方法的名字叫做動(dòng)態(tài)綁定關(guān)聯(lián)對(duì)象!!!

在這里我們先看看如果不用運(yùn)行時(shí)動(dòng)態(tài)綁定 , 關(guān)聯(lián)對(duì)象的方法該怎么去確定:

NSArray+ArrayName.h文件

給NSArray添加一個(gè)ArrayName的屬性:

#import <Foundation/Foundation.h>

@interface NSArray (ArrayName)

@property (nonatomic , copy) NSString *name ;

@end

NSArray+ArrayName.m文件

#import "NSArray+ArrayName.h"
//我們的方法是這樣的:
//找一個(gè)全局的靜態(tài)變量去存儲(chǔ)這個(gè)name屬性:
//首先創(chuàng)建一個(gè)可變字典
static NSMutableDictionary *kArrayToName ;

@implementation NSArray (ArrayName)

//初始化這個(gè)可變字典:
- (void)initArrayToName {
    if (kArrayToName == nil) {
        kArrayToName = [NSMutableDictionary dictionary] ;
    }
}


#pragma mark - 重寫(xiě)getter方法
- (NSString *)name {
    [self initArrayToName] ;
    //取值的時(shí)候強(qiáng)制把內(nèi)存地址改成一個(gè)數(shù)字 , 并用@()語(yǔ)法糖包裝成NSNumber對(duì)象:
    return kArrayToName[@((NSInteger)self)] ;
}


#pragma mark - 重寫(xiě)setter方法
- (void)setName:(NSString *)name {
    [self initArrayToName] ;
    kArrayToName[@((NSInteger)self)] = name ;
}

@end

接下來(lái)我們?cè)倏匆豢磩?dòng)態(tài)綁定的方法:

//定義一個(gè)全局的key:
//創(chuàng)建一個(gè)唯一的一個(gè)內(nèi)存地址,創(chuàng)建一個(gè)static的靜態(tài)變量 , 他的類(lèi)型是void的指針類(lèi)型 ;
//因?yàn)?static 修飾的變量的內(nèi)存地址是唯一的!!!
static void *kArrayNameKey = &kArrayNameKey ;
//也可以寫(xiě)為:static void *kArrayNameKey ; 后面的取地址符&目的就是讓本地址是唯一的,實(shí)際上你取值只要是唯一的就行!為了方便這里的一個(gè)小技巧就是取自己這個(gè)指針變量的的內(nèi)存地址 ;

@implementation NSArray (ArrayName)

#pragma mark - 重寫(xiě)getter方法
- (NSString *)name {
    return objc_getAssociatedObject(self, kArrayNameKey) ;
}


#pragma mark - 重寫(xiě)setter方法
-(void)setName:(NSString *)name {
    objc_setAssociatedObject(self, kArrayNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC) ;
}

@end

OBJC_ENUM枚舉值

其實(shí)是與@property是類(lèi)似的,從這里我們更能看出來(lái)Objective - C語(yǔ)言對(duì)C語(yǔ)言的這一層面向?qū)ο?/code>的封裝外衣!

typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
    OBJC_ASSOCIATION_ASSIGN = 0,           /**< Specifies a weak reference to the associated object. */
    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /**< Specifies a strong reference to the associated object. 
                                            *   The association is not made atomically. */
    OBJC_ASSOCIATION_COPY_NONATOMIC = 3,   /**< Specifies that the associated object is copied. 
                                            *   The association is not made atomically. */
    OBJC_ASSOCIATION_RETAIN = 01401,       /**< Specifies a strong reference to the associated object.
                                            *   The association is made atomically. */
    OBJC_ASSOCIATION_COPY = 01403          /**< Specifies that the associated object is copied.
                                            *   The association is made atomically. */
};

愿編程讓這個(gè)世界更美好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子萎庭,更是在濱河造成了極大的恐慌悠夯,老刑警劉巖烛芬,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惶洲,死亡現(xiàn)場(chǎng)離奇詭異抓督,居然都是意外死亡杉允,警方通過(guò)查閱死者的電腦和手機(jī)邑贴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)席里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拢驾,你說(shuō)我怎么就攤上這事奖磁。” “怎么了繁疤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵咖为,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我稠腊,道長(zhǎng)躁染,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任麻养,我火速辦了婚禮褐啡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖昌。我一直安慰自己备畦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布许昨。 她就那樣靜靜地躺著懂盐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糕档。 梳的紋絲不亂的頭發(fā)上莉恼,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音速那,去河邊找鬼俐银。 笑死,一個(gè)胖子當(dāng)著我的面吹牛端仰,可吹牛的內(nèi)容都是我干的捶惜。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荔烧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吱七!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鹤竭,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踊餐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后臀稚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吝岭,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苍碟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酒觅。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖微峰,靈堂內(nèi)的尸體忽然破棺而出舷丹,到底是詐尸還是另有隱情,我是刑警寧澤蜓肆,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布颜凯,位于F島的核電站,受9級(jí)特大地震影響仗扬,放射性物質(zhì)發(fā)生泄漏症概。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一早芭、第九天 我趴在偏房一處隱蔽的房頂上張望彼城。 院中可真熱鬧,春花似錦退个、人聲如沸募壕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舱馅。三九已至,卻和暖如春刀荒,著一層夾襖步出監(jiān)牢的瞬間代嗤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工缠借, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留干毅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓泼返,卻偏偏與公主長(zhǎng)得像硝逢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子符隙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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