美文网首页
004-runtime动态添加属性

004-runtime动态添加属性

作者: 紫荆秋雪_文 | 来源:发表于2017-02-25 20:15 被阅读11次

1、使用场景

  • 使用runtime动态添加属性,目的就上让某个属性与对象产生关联
  • 需求:让NSObject类,保存一个‘字符串’

2、解决方法一

  • 给系统类定义一个分类(NSObject),并且定义一个属性。然后实现该属性的set方法和getter方法,通过定义一个全局变量来记录这个属性的值
//
//  NSObject+objcet.h
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSObject (objcet)
//property:只负责声明 set方法、getter方法,当是并不会实现set方法和getter方法�
@property NSString *name;

@end

//
//  NSObject+objcet.m
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "NSObject+objcet.h"

//定义一个全局变量
static NSString *_name;

@implementation NSObject (objcet)

- (void)setName:(NSString *)name {
    _name = name;
}

- (NSString *)name {
    return _name;
}

@end

  • 调用方法
//
//  ViewController.m
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "ViewController.h"
#import "NSObject+objcet.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSObject *objc = [[NSObject alloc] init];
    objc.name = @"123";
    NSLog(@"%@", objc.name);
}


@end

  • 使用全局变量来记录属性值有一个缺点:有可能这个这个对象已经销毁了但是这个全局变量还存在

3、使用runtime来动态给对象添加属性

//
//  NSObject+objcet.h
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSObject (objcet)
//property:只负责声明 set方法、getter方法,当是并不会实现set方法和getter方法�
@property NSString *name;

@end

//
//  NSObject+objcet.m
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "NSObject+objcet.h"
#import <objc/message.h>

@implementation NSObject (objcet)

- (void)setName:(NSString *)name {
    // object: 给那个对象添加属性
    // key: 属性名称
    // value: 属性值
    // policy: 保存策略
    objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSString *)name {
    return objc_getAssociatedObject(self, @"name");
}

@end

  • 调用方法
//
//  ViewController.m
//  005-runtime(动态添加属性)
//
//  Created by 紫荆秋雪 on 2017/2/25.
//  Copyright © 2017年 Revan. All rights reserved.
//

#import "ViewController.h"
#import "NSObject+objcet.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSObject *objc = [[NSObject alloc] init];
    objc.name = @"123";
    NSLog(@"%@", objc.name);
}


@end

相关文章

  • 004-runtime动态添加属性

    1、使用场景 使用runtime动态添加属性,目的就上让某个属性与对象产生关联 需求:让NSObject类,保存一...

  • 二十一:Python之动态添加属性方法

    一:动态添加属性方法 动态添加属性:类属性,成员属性 动态添加方法:成员方法,类方法,静态方法 动态添加对象方法需...

  • 动态添加属性

    动态添加属性:什么时候需要动态添加属性? 开发场景:给系统的类添加属性的时候,可以使用runtime动态添加属性方...

  • iOS-RunTime 动态添加属性和方法

    1.1动态添加属性: 1.2调用: 1.3输出结果: 2.1动态添加方法 2.2输出结果: 3.1动态添加属性检测...

  • runTime之--动态添加属性(给系统类对象)

    系统类对象动态添加属性 实现 就是添加关联 微云网盘动态添加属性demo

  • iOS RunTime 理解

    可以遍历对象的属性 可以动态的添加、修改属性,动态添加、修改、替换方法,动态添加、修改、替换协议 可以动态创建类、...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • laravel 附加字段

    动态添加字段属性

  • 动态添加属性

    动态向类中加入属性 (未实现的方法并没有在类的MethodList)在分类中只能添加方法,不能添加属性,在分类中声...

  • iOS runtime 动态添加属性,方法,方法交换案例

    iOS runtime 动态添加属性,方法,方法交换案例 动态添加属性 我之前写过分类的文章,说过,分类不能添加成...

网友评论

      本文标题:004-runtime动态添加属性

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