美文网首页
Runtime-之给分类添加属性方法

Runtime-之给分类添加属性方法

作者: 芮淼一线 | 来源:发表于2020-08-06 20:11 被阅读0次

场景:

在objective-c中给分类添加属性时,不能直接添加getter,setter函数。这时可以利用runtime进行添加settet,getter函数。

.h文件

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSObject (Person)
//添加一个新属性
@property(nonatomic,copy)NSString *urlString;
- (void)clearAssociatedObjcet;
@end

NS_ASSUME_NONNULL_END

.m文件 @selector(urlString) 作为key

#import "NSObject+Person.h"
#import <objc/runtime.h>

@implementation NSObject (Person)

//添加一个自定义方法,用于清除所有关联属性
- (void)clearAssociatedObjcet{
    objc_removeAssociatedObjects(self);
}

- (void)setUrlString:(NSString *)urlString {
    objc_setAssociatedObject(self, @selector(urlString), urlString, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)urlString {
    return objc_getAssociatedObject(self, @selector(urlString));
}

@end

.m文件 手动设置key

#import "NSObject+Person.h"
#import <objc/runtime.h>

static NSString *nameKey = @"nameKey"; //urlString对应的key

@implementation NSObject (Person)

//添加一个自定义方法,用于清除所有关联属性
- (void)clearAssociatedObjcet{
    objc_removeAssociatedObjects(self);
}

- (void)setUrlString:(NSString *)urlString {
    objc_setAssociatedObject(self, &nameKey, urlString, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)urlString {
    return objc_getAssociatedObject(self, &nameKey);
}

@end

相关文章

网友评论

      本文标题:Runtime-之给分类添加属性方法

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