国产探花免费观看_亚洲丰满少妇自慰呻吟_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 等類則是不能添加類擴展的。其實在每個人的日常編碼工作中,都經常用到類擴展,只是沒有一個全新的認識而已。代碼就不上了,很簡單的,請百度之。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 边坝县| 宝山区| 塘沽区| 兴义市| 尼玛县| 荔浦县| 额济纳旗| 梓潼县| 镇沅| 棋牌| 阿瓦提县| 宁武县| 河曲县| 荆州市| 绥中县| 陇南市| 宁化县| 屏东市| 青阳县| 咸宁市| 财经| 繁昌县| 尉氏县| 百色市| 贺州市| 绥德县| 灵川县| 呼玛县| 嵊州市| 阿拉善左旗| 罗定市| 盘锦市| 哈密市| 英山县| 清远市| 郁南县| 文成县| 高邮市| 新郑市| 明水县|