OC category如何注入新的属性(property)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC category如何注入新的属性(property)相关的知识,希望对你有一定的参考价值。

利用OC Runtime

在.h中

@interface NSObject (LaserUnicorn)

@property (nonatomic, strong) LaserUnicorn *laserUnicorn;

@end

在.m中

#import <objc/runtime.h>

static void * LaserUnicornPropertyKey = &LaserUnicornPropertyKey;

@implementation NSObject (LaserUnicorn)

- (LaserUnicorn *)laserUnicorn {
    return objc_getAssociatedObject(self, LaserUnicornPropertyKey);
}

- (void)setLaserUnicorn:(LaserUnicorn *)unicorn {
    objc_setAssociatedObject(self, LaserUnicornPropertyKey, unicorn, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
}

@end

  更简洁的方式,试用@selector(nameOfGetter)

- (LaserUnicorn *)laserUnicorn {
    return objc_getAssociatedObject(self, @selector(laserUnicorn));
}

- (void)setLaserUnicorn:(LaserUnicorn *)unicorn {
    objc_setAssociatedObject(self, @selector(laserUnicorn), unicorn, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
}

  

以上是关于OC category如何注入新的属性(property)的主要内容,如果未能解决你的问题,请参考以下文章

OC中类别(Category)的属性

OC底层Category+load方法+initialize方法原理

对OC中Category 的理解,以及方法覆盖的解决办法

GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )

OC基础回想类别

给分类(Category)添加属性