iOS runtime ~ 动态添加属性

作者: 石虎132 | 来源:发表于2017-12-30 09:34 被阅读197次

    //联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

    一、概念

      1.runtime:动态添加属性:什么时候需要动态添加属性;

      2.开发场景:给系统的类添加属性的时候,可以使用runtime动态添加属性方法;

      3.本质:动态添加属性,就是让某个属性与对象产生关联。runtime一般都是针对系统的类;

      4.在分类中利用runtime动态添加属性;

      5.效果图:

    二、代码实现

    1.控制器代码:

    //  Created by  on 2017/12/29.

    //  Copyright © 2017年 石虎. All rights reserved.

    //

    #import "SHAddAttributesViewController.h"

    @interface SHAddAttributesViewController ()

    @end

    @implementation SHAddAttributesViewController

    - (void)viewDidLoad {

      [super viewDidLoad];

       self.view.backgroundColor = [UIColor orangeColor];

      //给系统NSObject类动态添加属性name

        NSObject *objc = [[NSObject alloc] init];

        objc.name = @"石虎你是最棒的....";

        NSLog(@"objc.name = %@",objc.name);

    }

    @end

    2.分类代码

    //  Created by  on 2017/12/29.

    //  Copyright © 2017年 石虎. All rights reserved.

    //

    #import "NSObject+Property.h"

    #import <objc/message.h>

    // 定义关联的key

    static const char *key = "name";

    @implementation NSObject (Property)

    - (void)setName:(NSString *)name

    {

     // 让这个字符串与当前对象产生联系

     // _name = name;

     // object:给哪个对象添加属性

     // key:属性名称

     // value:属性值

     // policy:保存策略

     objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

     //objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (NSString *)name

    {

     // 根据关联的key,获取关联的值。

     return objc_getAssociatedObject(self, key);

     //return objc_getAssociatedObject(self, @"name");

    }

    @end

    3.调试中效果图:

    谢谢!!!

    相关文章

      网友评论

        本文标题:iOS runtime ~ 动态添加属性

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