标签:类设计 自身 子类 存在 调用 模块化 避免 执行顺序 imp
NSData+ImageContentType 是NSData 的分类(Category)。
创建分类的步骤:
在Xcode 工程页面,按command + N ,在iOS -> Source 选择Objective-C File ,点击Next ,File Type 选择 Category ,file 框里输入分类名字,Calss 为要添加分类的类,可以是系统的类也可以是自定义的类,当然这里出现的主要是系统的类。
分类的描述:
无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎么扩展现有的类呢?当然,继承是个不错的选择。但是Objective-C 提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证类在原来的基础上,较小的改动就可以增加需要的功能。使用Category 对类进行扩展时,不需要访问其源代码,也不需要创建子类,这样我们就可以扩展系统提供的类。Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。
使用Objective-C 中的分类Category,利用OC 的动态运行时分配机制,是一种编译时的手段,允许我们给一个已经存在的类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问原有类中的代码就可以做到。
分类的功能作用:
类属性修饰符延伸:
Objective-C 中,类的实例化变量的范围有@private、@protected、@public。他们代表的意思和C++中相同,只是前面添加了一个@符号。下面介绍一下他们代表的范围:
分类的执行优先级:
类扩展(class Extensions)
类扩展(Extension) 是Category 的一个特例,有时候也被称为匿名分类。他的作用是为一个类添加一些私有的成员变量和方法。和分类不同,类扩展即可以声明成员变量又可以声明方法。
类扩展(Extension) 只有接口文件(.h),没有实现文件(.m) 定义的方法通通在类里边实现。类扩展听上去很复杂,但其实我们早就认识他了,当我们创建一个继承自UIViewControll的子类时,在它的.m 文件里面会自动生成类扩展:
@interface ExtensionsViewController ()
@end
我们可以在里面添加私有属性和私有方法,私有方法需要在下面的@implementation 里面实现。
当然类扩展可以定义在.m 文件中,这种扩展方式中定义的变量都是私有的,也可以定义在.h 文件中,这样定义的代码就是公有的,类扩展在.m 文件中声明私有方法是非常好的方式。类扩展中添加的方法,一定要实现,不然会有编译警告。
1 #import "ExtensionsViewController.h" 2 3 @interface ExtensionsViewController () 4 5 @end 6 7 @implementation ExtensionsViewController 8 9 ...
类扩展的作用:
使用格式:
1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 // 属性 6 // 方法 7 8 @end
分类和类扩展的相似之处是:都可以为类添加一个额外的方法。
不同之处在于:
1 // .h 2 @interface 类名(分类名字) 3 4 /*方法声明*/ 5 6 @end 7 8 // .m 9 @implementation类名(分类名字) 10 11 /*方法实现*/ 12 13 @end
参考链接:http://blog.csdn.net/jiajiayouba/article/details/21104987
http://www.jianshu.com/p/18d48e7f2aad
http://www.cnblogs.com/sgdkg/p/3142647.html
http://blog.csdn.net/kindazrael/article/details/8062784
http://www.cocoachina.com/ios/20161018/17784.html
http://www.jb51.net/article/80246.htm
http://www.2cto.com/kf/201504/387630.html
http://blog.csdn.net/qq_30513483/article/details/52068424
http://www.tuicool.com/articles/AV7fiy
SDWebImage源码阅读(二)NSData+ImageContentType
标签:类设计 自身 子类 存在 调用 模块化 避免 执行顺序 imp
原文地址:http://www.cnblogs.com/chmhml/p/6781969.html