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

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

作者: 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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

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

    类别个人认为类别是Objective-C设计的一大精髓,也是我爱上Objective-C的最大理由。类别是个强大的...

  • 第三篇:Objective-C 知识回顾之语言特性

    3.1.分类 你都用分类做了哪些事情呢? 给类添加实例方法或者类方法或者私有方法 分解体积庞大的类文件(比如网络相...

  • Objective-C Associated Objects 的

    当我们写个分类的时候,有时候想给这个分类添加属性,但是却不能添加实例变量,然而我们可以通过 Associated ...

  • category 和 extension

    由分类结构可知,分类可添加实例方法,类方法,遵守协议,不可添加实例变量 category的主要作用: 1、 为已经...

  • category底层原理

    category原码 通过查看源码可以看出,给分类可以添加实例方法,类方法,协议,属性(无法添加实例变量)。 添加...

  • runtime 应用

    1. 交换方法 1.1 获取类方法 1.2 获取实例方法 1.3 交换两个方法 实例: 2. 分类添加属性 下面给...

  • 通过分类给控制器添加加载小菊花

    在分类中动态添加属性 知道这个后怎样用在自己的分类之中呢? 给UIViewController 添加一分类 在每次...

  • 为啥非得家属陪同呢

    昨天我7点到协和,呼吸内科、消化内科、影像诊断科、麻醉科,一个个挂号看过来。等到全部看完,预约好下周一的无痛胃肠镜...

  • iOS开发:分类添加属性,不会添加实例变量

    1、不能在分类中添加实例变量的原因 因为分类的本质也是结构体,这里没有实例变量的列表,添加进去存不了。(个人理解)...

  • 2020-04-05 KVC

    课程引入:成员变量、实例变量、属性,区别是什么?---分类不能添加实例变量 成员变量 -- 实例变量 -- 属性 ...

网友评论

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

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