美文网首页
为啥你非得给分类添加实例呢

为啥你非得给分类添加实例呢

作者: so_bright | 来源:发表于2019-08-07 11:06 被阅读0次

    类别
    个人认为类别是Objective-C设计的一大精髓,也是我爱上Objective-C的最大理由。
    类别是个强大的东西,它既可以为类添加方法,也可以添加实例。一定有不少人不认同,想提醒我:类别的局限性之一就是无法向类中添加新的实例变量。 背书真心毁人,听我举个例子慢慢说。
    重新再来个Teacher类:

    @interface Teacher : NSObject   
    {   
        NSUInteger age;   
    }   
       
    @end   
    

    光有个年龄还不能满足对teacher的描述,我想加个profession实例来存teacher的专业。直观的想法是子类化Teacher,其实也可以用类别。
    你需要了解一下 runtime 编程知识,关注一下 objc_setAssociatedObject 和 objc_getAssociatedObject 。

    //   
    //  Teacher+Profession.m   
    //     
      
    #import "Teacher+Profession.h"   
    #import   
    
      
    const char *ProfessionType = "NSString *";   
    @implementation Teacher (Profession)   
      
    -(void)setProf:(NSString*)prof   
    {   
       objc_setAssociatedObject(self, ProfessionType, prof, OBJC_ASSOCIATION_RETAIN_NONATOMIC);   
    }   
      
    -(NSString *)prof   
    {   
       NSString *pro = objc_getAssociatedObject(self, ProfessionType);   
       return pro;   
    }   
      
    @end   
    

    现在就可以通过setProf: 和 prof 来存取 teacher 的 profession 值了。

    作者:ScaryMonsterLyn
    链接:https://www.jianshu.com/p/c473b41c083d
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:为啥你非得给分类添加实例呢

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