美文网首页
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