美文网首页
objc_setAssociatedObject和objc_ge

objc_setAssociatedObject和objc_ge

作者: 汪飞蛟 | 来源:发表于2017-01-17 19:48 被阅读0次

    1.@selector原理介绍

    SEL 类成员方法的指针

    可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.

    它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)

    2.使用@selector方法地址作为分类属性标识符

    @interface NSObject (CategoryWithProperty)

    @property (nonatomic, strong) NSObject *property;

    @end

    @implementation NSObject (CategoryWithProperty)

    - (NSObject *)property {

    return objc_getAssociatedObject(self, @selector(property));

    }

    - (void)setProperty:(NSObject *)value {

    objc_setAssociatedObject(self, @selector(property), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    @end

    3. 使用方法_cmd作为分类属性标识符

    @interface NSObject (CategoryWithProperty)

    @property (nonatomic, strong) NSObject *property;

    @end

    @implementation NSObject (CategoryWithProperty)

    - (NSObject *)property {

    return objc_getAssociatedObject(self, _cmd);

    }

    - (void)setProperty:(NSObject *)value {

    objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    @end

    相关文章

      网友评论

          本文标题:objc_setAssociatedObject和objc_ge

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