美文网首页
如何给iOS分类动态添加属性

如何给iOS分类动态添加属性

作者: 蚂蚁牙齿不黑 | 来源:发表于2016-06-06 14:10 被阅读2066次

    给分类扩展属性

    • 创建Person 这个类 并且为Person这个类增加分类
    Paste_Image.png
    • 为Person这个类扩充属性testName
    #import "Person.h"
    @interface Person (Extension)
    /**
     *  名字
     */
    @property (nonatomic, copy) NSString *testName;
    @end
    
    • 接下来创建一个Person对象并且开始使用这个属性
    #import "ViewController.h"
    #import "Person.h"
    #import "Person+Extension.h"
    
    @interface ViewController ()
    @end
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        Person *p = [[Person alloc]init];
        p.testName = @"jack";
    }
    
    • 运行发现报错 ,由此可以推断分类中的属性 系统没有为你实现set 方法及get方法
    Paste_Image.png

    解决办法 自己实现这个属性set 方法及get方法

    #import "Person+Extension.h"
    #import <objc/runtime.h>
    
    static NSString *testNameKey = @"testNameKey";
    static NSString *testAgeKey = @"testAgeKey";
    
    @implementation Person (Extension)
    
    @dynamic testName;
    @dynamic testAge;
    
    -(void)setTestName:(NSString *)testName
    {
        objc_setAssociatedObject(self, &testNameKey, testName, OBJC_ASSOCIATION_RETAIN);
    }
    -(NSString *)testName{
      return objc_getAssociatedObject(self, &testNameKey);
    }
    
    -(void)setTestAge:(int)testAge{
    
        objc_setAssociatedObject(self, &testAgeKey, @(testAge), OBJC_ASSOCIATION_RETAIN);
    }
    
    -(int)testAge{
    
        return [objc_getAssociatedObject(self, &testAgeKey) intValue];
    }
    
    @end
    
    • 接下来回到控制器看是不是已经扩展ok
    Paste_Image.png
    • OK

    相关文章

      网友评论

          本文标题:如何给iOS分类动态添加属性

          本文链接:https://www.haomeiwen.com/subject/xshorttx.html