004-runtime动态添加属性

2017-02-25  本文已影响11人  紫荆秋雪_文

1、使用场景

2、解决方法一

//
//  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

上一篇下一篇

猜你喜欢

热点阅读