美文网首页
通过runtime给分类添加属性

通过runtime给分类添加属性

作者: loghm | 来源:发表于2017-09-06 23:21 被阅读9次

    OC中的分类只能添加方法,没有办法新增属性,但是有时候我们需要给分类新增属性,我们可以通过runtime实现。

    Runtime

    .h文件中,声明一个属性name,利用runtime的对象关联技术,在.m中重写他的set,get方法。

    #import <objc/runtime.h>
    //申明一个
    -(void)setName:(NSString *)name {
    /*
         objc_AssociationPolicy参数使用的策略:
         OBJC_ASSOCIATION_ASSIGN;            //assign策略
         OBJC_ASSOCIATION_COPY_NONATOMIC;    //copy策略
         OBJC_ASSOCIATION_RETAIN_NONATOMIC;  // retain策略
         
         OBJC_ASSOCIATION_RETAIN;
         OBJC_ASSOCIATION_COPY;
         */
        /*
         关联方法:
         objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
         
         参数:
         * id object 给哪个对象的属性赋值
         const void *key 属性对应的key
         id value  设置属性值为value
         objc_AssociationPolicy policy  使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC
         */
        objc_setAssociatedObject(self, stringKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    -(NSString *)name {
        return objc_getAssociatedObject(self, stringKey);
    }
    

    利用该技术,可以实现app中个人界面通常需要取消导航栏的需求,以往我们的做法是隐藏导航栏,但是这样会出现各种问题,动画效果不好的情况,利用runtime我们可以设置导航栏的subViews的透明度。github有大神写的demo,这里贴出地址,学习学习。
    https://github.com/Cloudox/SmoothNavDemo
    该笔记借鉴了大神的文章,也贴一下
    http://www.cocoachina.com/ios/20170331/18944.html

    相关文章

      网友评论

          本文标题:通过runtime给分类添加属性

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