您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页iOS分类和扩展(Categories和Extensions)

iOS分类和扩展(Categories和Extensions)

来源:华佗小知识
分类(Category)
 
分类能够做到的事情主要是: 即使在你不知道一个类的源码情况下,向这个类添加扩展的方法
 
此外,分类能够保证你的实现类和其他的文件区分开。
 

 

  使用分类为类添加方法(Add Methods to Classes)
 
通过在interface中声明一个额外的方法 并且在implementation 中定义相同名字的方法即可。分类的名字(也就是括号括起来的CustomView)表示的是: 对于声明于其他地方的这个类(UIViewController),在此处添加的方法是额外的,而不是表示这是一个新的类你不可以通过分类为一个类添加额外的成员变量
 
在implementation中,引入头文件的时候主要引用的方式是:
 

 

 另外,虽然Category不能够为类添加新的成员变量,但是Category包含类的所有成员变量,即使是@private的。Category可以重新定义新方法,也可以override继承过来的方法。
 
类扩展(Class Extensions)
 
类扩展就像匿名( 也就是没有那个括号里面的名字CustomView)的分类一样,除了一样不同的是,类扩展声明必须在@implementation在实现。
 
先看一段代码:

 

 看上面这段代码,有没有问题?编译器编译的时候,这段代码是可以编译通过,但当运行时,就会报错。为什么?
 
因为没有实现Category中的setNum方法。而用类扩展去实现,请看:

 

 setNum是必须要实现,不然编译器会提出警告。
 
从上面看出,分类和类扩展的相似之处是: 都可以为类添加一个额外的方法
 
不同之处在于: 要添加额外方法,分类必须在第一个@interface中声明方法,并且在@implementation中提供实现,不然运行时出错。而类扩展,你添加的方法是一个required API,如果不去实现,编译器会警告,而且这个方法的声明可以不在第一个@interface中去声明。

转载于:https://www.cnblogs.com/chiefhsing/archive/2013/02/21/2920769.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务