协议与分类
文章平均质量分 53
Win_77
iOS开发工程师,坐标北京,学习分享计算机开发知识。
展开
-
Objective-C中如何通过协议提供匿名对象
匿名对象是什么?不用指明具体类型的对象,比如delegate对象就是匿名的,因为它是id类型的。为什么要用匿名对象?1、接口背后有多个不同的实现类,而你又不想指明具体使用哪个类,因为有时候这些类可能会变,有时候他们又无法容纳于标准的类继承体系中,因而不能以某个公共基类来统一表示。比如处理数据库连接的程序库,对于处理连接所用的那个类,你也许不想叫外人知道其名字,因为不同的数据库可能要用不同的类来处理,没有办法令其都继承自同一基类,那么就得返回id类型的东西了。在开发后续版本时,无须改变公共原创 2021-01-18 18:12:38 · 255 阅读 · 0 评论 -
Objective-C开发技巧:总是为第三方类的分类名称加前缀
前缀是什么?一般来说,这个前缀应该与应用程序或程序中其他地方所用的前缀相同。为什么要加前缀?分类中的方法直接添加在类里面,他们就好比这个类中的固有方法。将分类方法加入类中这一操作是在运行期系统加载分类时完成的。运行期系统会把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法,分类又实现了一次,那么分类中的方法会覆盖原来那一份实现代码。实际上可能会发生多次覆盖,比如某个分类中的方法覆盖主实现中的相关方法,而另外一个分类中的方法又覆盖了这个分类中的方法。多次覆盖的结果以最后一个分原创 2021-01-17 22:56:00 · 125 阅读 · 0 评论 -
在Objective-C中可以利用分类来管理实现代码
分类是什么?分类也是Objective-C的一项重要语言特性。利用分类机制,我们无须继承子类即可直接为当前类添加方法,而在其他编程语言中,则需要通过继承子类来实现。由于Objective-C运行期系统是高度动态的,所以才支持这一特性。为什么要将实现代码分散到分类中?类中经常容易填满各种方法,而这些方法的代码则全部堆在一个巨大的实现文件里。有时这么做是合理的,因为即便通过重构把这个类打散,效果也不会更好。在此种情况下,可以通过Objective-C的分类机制,把类代码按逻辑划入几个分区中,这对开发原创 2021-01-17 21:55:34 · 164 阅读 · 0 评论 -
在Objective-C中利用协议实现委托和数据源模式,并提供一项优化技术
协议是什么?Objectiv-C语言有一项特性叫做"协议",我们可以把某个类应该实现的一系列方法定义在协议里面。理解并善用协议可令代码变得更易维护,因为协议这种方式能很好地描述接口。委托是什么?oc广泛使用一种名叫"委托模式"的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其"委托对象"。而这"另一个对象"则可以给其委托对象回传一些消息,也可以在发生相关事件时通知委托对象。此模式可将数据与业务逻辑解耦。比方说,...原创 2021-01-17 10:05:35 · 169 阅读 · 0 评论 -
Objective-C中使用“class-continuation分类“隐藏实现细节
"class-continuation分类"是什么?"class-continuation分类"和普通的分类不同,它必须定义在其所接续的那个类的实现文件里。此分类没有特定的实现文件,其中的方法都应该定义在类的主实现文件里。与其他分类不同,"class-continuation分类"没有名字。比如,有个类叫做EOCPerson,其"class-continuation分类"写法如下:@inrtface EOCPerson (){ //可以声明实例变量}@end为什么需要...原创 2021-01-18 16:22:15 · 267 阅读 · 0 评论 -
为什么不要在Objective-C的分类中声明属性
属性是什么?属性所要表达的意思是:类中有数据在支持着它。属性是用来封装数据的。属性只是定义实例变量及相关存取方法所用的”语法糖“,所以也应遵循同实例变量一样的规则。为什么不能在分类中声明属性?除了”class-continuation“分类之外,其他分类都无法向类中新增实例变量,因此,它们无法把实现属性所需的实例变量合成出来。比方说你实现过一个表示个人信息的类,用分类机制将其代码分段。设计一个专门处理交友事务的分类,其中所有方法都与操作某人的朋友列表有关。如果把代表朋友列表的那项属性也放原创 2021-01-18 13:00:38 · 115 阅读 · 0 评论