Runtime為Category添加屬性

1.創(chuàng)建Person類

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, copy)NSString *name;  // 名稱

@end

2.創(chuàng)建Person的類別

#import "Person.h"

@interface Person (addProperty)

// 添加屬性
@property (nonatomic, assign)NSInteger age;
@property (nonatomic, copy)NSString *stu;

@end

3.Person類別.m的實(shí)現(xiàn)

#import "Person+addProperty.h"
#import <objc/runtime.h>

@implementation Person (addProperty)

static char ageKey = 'n';
static char stuKey = 's';

// 給age屬性提供setter和getter方法
- (void)setAge:(NSInteger)age {
    NSString *s = [NSString stringWithFormat:@"%ld",(long)age];
    objc_setAssociatedObject(self, &ageKey, s, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSInteger)age {
   return [objc_getAssociatedObject(self, &ageKey) integerValue];
}

// 給stu屬性提供setter和getter方法
- (void)setStu:(NSString *)stu {
    objc_setAssociatedObject(self, &stuKey, stu, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)stu {
    return objc_getAssociatedObject(self, &stuKey);
}

4.屬性的使用

#import "ViewController.h"
#import "Person+addProperty.h"

- (void)viewDidLoad {
    [super viewDidLoad];
   
    // 測(cè)試分類的添加屬性
    Person *p = [[Person alloc] init];
    p.name = @"張三";  // 原有的屬性
    p.age = 30;       // 添加的屬性
    p.stu = @"Good";  // 添加的屬性
    
    NSLog(@"%@---%ld---%@",p.name,p.age,p.stu);
}

// 控制臺(tái)打印結(jié)果為
text1[14973:2226652] 張三---30---Good



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 先提下category使用 給NSObject添加一個(gè)name屬性(嚴(yán)格來說是,實(shí)現(xiàn)setter getter 方...
    Abler閱讀 653評(píng)論 0 3
  • 我們都知道Category中只能新添加方法,而不能新添加成員變量。如果添加屬性@property的話,只會(huì)生成ge...
    小明大神閱讀 860評(píng)論 2 9
  • 這是第三個(gè)清明了,是我第三次清明節(jié)里給你上墳了,本以為你會(huì)陪著我,在以后的以后無數(shù)個(gè)清明節(jié)里,我們一起去給彼此的先...
    風(fēng)舞玲瓏閱讀 2,964評(píng)論 3 5
  • 原題 兩個(gè)排序的數(shù)組A和B分別含有m和n個(gè)數(shù),找到兩個(gè)排序數(shù)組的中位數(shù),要求時(shí)間復(fù)雜度應(yīng)為O(log (m+n))...
    Jason_Yuan閱讀 389評(píng)論 0 0

友情鏈接更多精彩內(nèi)容