zoukankan      html  css  js  c++  java
  • ObjectiveC category

      如果要对一个类进行扩展,通常的办法就是继承和组合。
      Objective-C提供了另一个选择,引入了category机制,它允许程序员为已有的对象添加新的方法,即便是在没有该对象的源代码的情况下。其优点是利用这个机制,程序员可以把一堆方法分门别类,分成若干组,每组方法用一个Category名字加以命名,定义在同一个文件里。这也是为什么把这个机制叫做Category的原因。

      比如需要为NSString类添加一个新的方法,继承的方式就不太可取,原因在于NSString是个class cluster,一个类簇。什么是一个类簇?简单的来说,NSString是个“工厂类”,然后它在外层提供了很多方法接口,但是这些方法的实现是由具体的内部类来实现的。当使用NSString生成一个对象时,初始化方法会判断哪个“自己内部的类”最适合生成这个对象,然后这个“工厂”就会生成这个具体的类对象返回给你。这种又外层类提供统一抽象的接口,然后具体实现让隐藏的,具体的内部类来实现,在设计模式中称为“抽象工厂”模式。

      因此,对于 NSString,NSDictionary等“类簇”类时,最好用“组合”或者“Category”来进行扩展。

      注意:Category只能用于方法,不能用于成员变量。

       //如已定义Circle类,CircleCal.h文件中,
       #import "Circle.h"
    @interface Circle(CircleCal) -(float) AreaCal; -(float) LenCal;
    @end;
      // CircleCal.m文件中,
       #import "CircleCal.h"
    @implementation Circle(CircleCal) -(float) AreaCal{} -(float) LenCal{}
    @end; // 此时便可在main函数中调用新定义的函数;

    参考:

    Cocoa核心能力:类簇
    objc’s category and class cluster
    MAC 开发笔记——Objective C 语法之Category和Extension

     

     

  • 相关阅读:
    etcd+confd管理nginx
    k8s基础
    nginx配置总结
    Golang相关
    docker基础
    celery结合django使用配置
    常用算法
    python3和paramiko安装
    git使用总结
    Linux系统入门实操经验分享
  • 原文地址:https://www.cnblogs.com/pure/p/2466264.html
Copyright © 2011-2022 走看看