国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS Category 與 Extension區別

2019-11-06 09:55:30
字體:
來源:轉載
供稿:網友

一直搞不懂類擴展是什么東西,今天有時間,特意研究了一下,有誤之處還望博友指正。

category一般稱為分類又叫類別,是一種專門對某個類進行擴充的方法。但是其不能添加屬性,因為它是在運行時決定的,此時的類的內存布局已經確定,如果此時可以添加屬性

則勢必會破壞類的內存布局,帶來災難性的后果。既然提到了運行時,那就自然想到是否可以在運行時對分類進行添加屬性呢?答案:完全可以。

如下,見代碼:

@interface NSArray (runtime)

@PRoperty(nonatomic,strong)NSString * name;

@property(nonatomic,assign)int  num;

@end

-(void)setName:(NSString *)name

{

    objc_setAssociatedObject(self,@selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(NSString *)name

{

    NSLog(@"%@",NSStringFromSelector(_cmd));

    returnobjc_getAssociatedObject(self,_cmd);//_cmd實際為“name”

}

-(void)setNum:(int)num

{

    //基本數據類型 與 對象 區別

    NSValue * value = [NSValuevalue:&num withObjCType:@encode(int)];

    objc_setAssociatedObject(self,@selector(num), value, OBJC_ASSOCIATION_RETAIN);

}

-(int)num

{

    int cValue = {0};

    NSValue * value =objc_getAssociatedObject(self,@selector(num));

    [value getValue:&cValue];

    return cValue;

}

extension一般稱為類擴展又名匿名類擴展,它既可以對類添加屬性又可以添加方法,實現均在implemetion中,它是在編譯時期決定的,一般用來隱藏類的私有消息(方法、屬性)。另,一般只有有源碼的類才會有類擴展,諸如系統的NSString 等類則是不能添加類擴展的。其實在每個人的日常編碼工作中,都經常用到類擴展,只是沒有一個全新的認識而已。代碼就不上了,很簡單的,請百度之。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天柱县| 洞口县| 西宁市| 墨江| 罗山县| 商洛市| 托克托县| 吴堡县| 呈贡县| 肇东市| 雷山县| 大兴区| 吴江市| 大荔县| 景洪市| 洛南县| 双峰县| 龙山县| 东平县| 永丰县| 南通市| 固阳县| 渭源县| 嵊泗县| 金川县| 崇义县| 金门县| 临沧市| 皋兰县| 平谷区| 镇赉县| 安化县| 钦州市| 太和县| 临高县| 玉山县| 紫金县| 娱乐| 资中县| 广西| 广饶县|