项目作者: CooFree

项目描述 :
🚀使用分类 (category)和扩展(Extension)
高级语言: Objective-C
项目地址: git://github.com/CooFree/Category.git
创建时间: 2017-08-01T09:49:27Z
项目社区:https://github.com/CooFree/Category

开源协议:

下载


⭐️⭐️

Category

  • 有两方面局限性:
    • 无法向类中添加新的实例变量,类别没有位置容纳实例变量。
    • 名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
  • 主要有3个作用:
    • 可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。
    • 创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
    • 向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。

Extension

  • Extension常被称为是匿名的Category(比如:在字符串中类扩展extension,添加的属性str1和show方法都是私有的,只能在String类中可以访问得到
    )
  • 用于给类添加新方法,但只作用于原始类,不作用于subclass
  • 只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的

    Extension可以给原始类添加新方法,以及新属性

他们的主要区别是:

  1. 形式上来看,extension是匿名的category。
  2. extension里声明的方法需要在mainimplementation中实现,category不强制要求。
  3. extension可以添加属性(变量),category不可以。

目录" class="reference-link">目录


☞☞☞QuartzCore" class="reference-link">☞☞☞QuartzCore


☞☞☞UIKit" class="reference-link">☞☞☞UIKit

https://github.com/leeSmile/tools/tree/master/textTools