category、protocol、delegate总结
生活随笔
收集整理的这篇文章主要介绍了
category、protocol、delegate总结
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一.category(类别) 类别是一种类扩展的机制,能为现有的类添加新方法。 ①类别的基本语法 @interface部分,如: @interface NSString (NumberConvenience) - (NSNumber *) lengthAsNumber; @end 我们为NSString类添加了名为NumberConvenience的类别。 注:
- 类别只可以添加方法,不可以添加实例变量
- 类别可以添加属性,但属性必须是@dynamic类型的
- 将类的实现代码分散到多个不同的文件和框架中,这样可以是类划分成多个模块,降低类的复杂度,便于维护。
- 类别的扩展功能,已经存在的类可以在不更改的情况下通过类别进行功能扩展。
- 类别可以实现功能的局部化封装,模拟实现私有方法。
- 通过类别向对象添加非正式协议。这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法。
- 类别不可以添加实例变量
- 类别会发生名称冲突,即类别中的方法与现有方法重名,类别具有更高的优先级。
- 声明协议
- 采用协议
- @required和@optional属性(Objective-C 2.0的新特性)
- 正式协议要求显示的采用
- 协议名称必须唯一
- 采用协议意味着你承诺实现该协议@required属性的所有方法。否则,编译器会生成警告来提醒。
- 协议可以继承父协议
- protocol可以将业务方法定义剥离出来,形成单独的文件,对于不关心的功能可以不关注他的具体实现,这样有利于分工
- 类别可以在不改变原来代码的情况下往里面添加新的方法,但继承不可以。
- 类别只能添加方法,不能删除修改方法,但继承即可以增加,也可以修改或者删除方法。
- 类别不可以增加属性,而继承可以。
- 类别中只能增加方法
- 类扩展不仅可以增加方法,还可以增加实例变量,只是该 实例变量默认是@private类型 的(作用范围只能在自身类,而不是子类或其他地方);
- 类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。
- 类扩展是在 .m 文件中声明私有方法的非常好的方式。
- 类扩展所声明的方法必须依托对应类的实现部分来实现(即不能像类别那样拥有独立的实现部分(@implementation部分))
- 类扩展只能本类调用方法,子类也无法调用父类的延展。
- 通过block实现
- 通过protocol实现
- 通过delegate实现
- 结合protocol和delegate实现
转载于:https://www.cnblogs.com/jobten/p/4694907.html
总结
以上是生活随笔为你收集整理的category、protocol、delegate总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: G - Strongly connect
- 下一篇: 14年12月CCF真题4-最优灌溉