iOS|iOS-常用设计模式一

在日常开发中 , 我们潜移默化的都会使用到自己认为顺手的设计模式 , 这样不仅可以提高代码的复用性 , 更能减少很多无用功 。 下面就iOS中常用的设计模式进行汇总分析 。
一:单例模式
简单的说 , 在整个程序中只有一个实例 , 并提供一个类方法供全局调用 , 在编译时初始化这个类后 , 就一直保存在内存中 , 到程序(APP)退出时由系统自动释放这部分内存 。 而为了保证单例类在使用中始终都存在 , 会把单例存在存储器的全局区域 , 在编译时分配内存 , 只要程序还在运行就会一直占用内存 。 由于一个类只有唯一个实例 , 从而做到节约内存 , 并且易于跨模块 。
应用场景一般用于进行资源共享控制 。 如工具类、公共跳转类等 。
优缺点优点:只实例化一次 , 所以程序如果出了问题 , 可以快速的定位;由于在整个程序中只存在一个对象 , 节省了系统内存资源 , 提高了程序的运行效率;
缺点:不能被继承 , 不能有子类 , 不易被重写或扩展(可以使用分类) 。 由于单例对象只要程序在运行中就会一直占用系统内存 , 该对象在闲置时并不能销毁 , 在闲置时也消耗了系统内存资源;
注意事项OC中 , 重写allocWithZone方法 , 保证即使用户用 alloc方法直接创建单例类的实例 , 返回的也只是此单例类的唯一静态变量 。
对new、copy、mutableCopy的处理:
1.重写这些方法 , 当调用时提示或者返回单例类实例 , 可参考alloc方法的处理 。
2.直接禁用 , 禁止调用这几个方法 , 否则就报错 , 编译不过 。
二:观察者模式
观察者模式本质上是一种发布-订阅模型可以消除具有不同行为的对象之间的耦合 , 使得不同对象可以协同工作 , 同时也可以被复用于其他地方Observer从Subject订阅通知 , ConcreteObserver实现重现ObServer并将其重载update方法 。 iOS中典型的观察者模式实现方式为NSNotificationCenter和KVO 。
通知中心NSNotificationCenter和NSNotification对象实现了一对多的模型 。 通过NSNotificationCenter可以让不认识的对象间进行通讯 。 NSnotificationCenter是一种典型的有调度中心的观察者模式实现方式 。 NSNotificationCenter为中心 , 观察者向Center中注册对某个行为感兴趣 , 然后通过NSNotificationCenter进行变化广播 。 所有的观察和监听行为都向同一个中心注册 , 所有对象的变化也都通过同一个中心向外广播 。
KVO1、实现原理:类的对象第一次被观察时 , 系统会在运行期动态地创建该类的一个派生类 , 这个派生类中重写基类中任何被观察属性的setter方法 。 派生类在被重写的setter方法实现真正的通知机制 , 这么做是基于设置属性会调用setter方法 , 而通过重写就获得了KVO需要的通知机制 。 当然前提是要通过遵循 KVO 的属性设置方式来变更属性值 , 如果仅是直接修改属性对应的成员变量 , 就无法实现KVO 。 派生类还重写了class方法以“欺骗”外部调用者 。 然后系统将这个对象的isa指针指向这个新的派生类 , 这时这个对象就成为该派生类的对象 , 因而在该对象上对setter的调用就会调用重写的setter , 从而激活键值通知机制 。 派生类还重写了dealloc方法来释放资源 。
通知中心与KVO的区别
- 发送机制的区别:通知中心自身就是中介者 , 两个对象间的通信通过中介者来发送信息 。 发送方不需要注册任何信息 , 所有的配置都由注册方控制 。 而KVO是两个对象之间直接通信 , 发送通知信息的对象的注册键值发生变化的时候 , 会发送信息给被通知方 。 发送方主动添加被发送方注册信息 , 被发送方还需实现一个方法 , 两方之间都需要进行些配置 , 稍有不当就会导致崩溃 。
- ios16|未受到电商冲击,理发店为啥还是纷纷倒闭?过来人说出真相
- ios16|一步到位能用5年,目前这3款手机能闭眼入,买手机不要太小气
- 物联网|微信iOS版8.0.24正式发布:iOS16闪退问题已解决,并有新功能
- iOS版本微信又迎来重要更新,这次值得升级
- iOS|iPhone6s升级iOS15.6b3各方面优化太满意了,老机型终于能养老了
- 虽然正式版还尚早|iOS 16第二个测试版更新细节揭晓:苹果让锁屏更个性化
- |?你确定会用iPhone?10个iOS“长按”技巧,按一下就会有惊喜
- 触控|升级12代酷睿还要换个散热器,找个入门款也能正常用
- ios16|iPhone14 Pro被进一步曝光,外观,参数皆传新消息,苹果很豪横
- iOS|iOS16Beta2升级表现大赞,4款iPhone性能提升,仅这部千万别更新
