小论ios中的设计模式

2024-06-03 06:08
文章标签 设计模式 ios 小论

本文主要是介绍小论ios中的设计模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无论是做什么产品,设计模式都是一个非常重要的环节。对不同模式的正确应用不仅仅能加快开发,更能使整个项目拥有清晰的架构,便于后续的发展和维护。

在阅读项目代码的过程中,我一直在问自己,为什么这个地方要这么设计,哪些方法要开放,哪些需要隐藏,哪些需要使用单例,为什么要在这里使用观察。一个优秀的程序员不能仅仅完成任务,应该去思考把代码写的优雅,把产品做的优秀,把自己当作一个设计师i,一个作家,而不是一个工人。

下面是我阅读代码时候对设计模式的一些想法和思考,不正确的地方请多多指教。

MVC。

MVC应该是最为耳熟的设计模式了。MVC指的就是模型,视图,控制器分离。最为理想的MVC设计应该是每一个类都应该有且只有归属到一个部分中。在项目阅读过程中,我发现到MVC的思想无处不在,但到了实际的实施过程中,也有许多很难照顾到的地方。比如IOS中的VC,他究竟应该算在V还是算在C中呢。如果完全将数据源设置抽离出来,开发成本肯定会会加大,对于是否利大于弊,在不同的环境下值得商榷。许多部分在我阅读的过程中,我尝试用MVC的考量去修改代码,但结果并不理想。也就是说,不能生搬硬套MVC思想,而是应该根据具体的情况采取具体的考量。

单例模式。

项目代码中,大量应用了单例模式。在开始的时候,对于单例我是很不明白的,因为之前做的自己的demo都很小,并没有实现到这个部分。在阅读了一些人写的文章关于单例的思考,我才逐渐明白在项目中单例的作用,下面是我看到的一个对于单例解释非常好的一篇文章的部分

单例模式(Singleton)概念:整个应用或系统只能有该类的一个实例在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存。例子。文件管理,侧边栏,弹出提示,网络请求管理,公有方法,缓存,默认设置等等单例的五个小步1. 声明一个可以新建和获取单个实例对象的方法2. 声明一个static类型的类变量3. 声明一个只执行一次的任务4. 调用dispatch_once执行该任务指定的代码块,在该代码块中实例化上文声明的类变量5. 返回在整个应用的生命周期中只会被实例化一次的变量

代码事例


//Singleton.h
@interface Singleton : NSObject
+ (Singleton *)sharedSingleton; <1>
@end/***************************************************************///Singleton.m
#import "Singleton.h"
@implementation Singleton   
static Singleton *sharedSingleton = nil;<2>+ (Singleton *)sharedSingleton{static dispatch_once_t once;<3>dispatch_once(&once,^{sharedSingleton = [[self alloc] init];<4>//dosometing});return sharedSingleton;<5>
}

使用单例的目的是有些对象作为整个应用都存在的可以公用的,比如文件管理器,网络管理器,通用的导航栏(侧边栏,下边栏等等)。使用单例可以避免过多的对象生成,节省内存开销。在ios7后一般使用GCD+ARC的形式。

单例对象在整个程序中只有唯一的入口,因此单例的对象都是静态的static,同时,一般我们使用懒加载,即在第一次使用的时候再调用dispatch_once生成。一旦类已经生成了实例,那么生成器再也不会被调用。

观察者模式(KVO)。

又是一个在项目中非常常用的模式,后面会有一篇专门的博客文章来记录自己的一些使用的心得。

键值编码(KVC)

可以简化代码。特别在Json传值中应用的非常多。在像TableView中的数据源设置中也有很多的应用。

这篇关于小论ios中的设计模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026189

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二、单例模式的介绍 说到单例模式,大家第一

漫谈设计模式 [12]:模板方法模式

引导性开场 菜鸟:老大,我最近在做一个项目,遇到了点麻烦。我们有很多相似的操作流程,但每个流程的细节又有些不同。我写了很多重复的代码,感觉很乱。你有啥好办法吗? 老鸟:嗯,听起来你遇到了典型的代码复用和维护问题。你有没有听说过“模板方法模式”? 菜鸟:模板方法模式?没听过。这是什么? 老鸟:简单来说,模板方法模式让你在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。这样,你可

漫谈设计模式 [9]:外观模式

引导性开场 菜鸟:老鸟,我最近在做一个项目,感觉代码越来越复杂,我都快看不懂了。尤其是有好几个子系统,它们之间的调用关系让我头疼。 老鸟:复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你的代码结构? 菜鸟:设计模式?我听说过一些,但不太了解。你觉得我应该用哪个模式呢? 老鸟:听起来你的问题可能适合用**外观模式(Facade Pattern)**来解决。我们可以一起探讨一下。

设计模式大全和详解,含Python代码例子

若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是设计模式的简要介绍和 Python 代码示例,涵盖主要的创建型、结构型和行为型模式。 一、创建型模式 1. 单例模式 (Singleton

漫谈设计模式 [6]:适配器模式

引导性开场 菜鸟:老鸟,我最近在项目中遇到一个问题,我们的系统需要集成一个新的第三方库,但这个库的接口和我们现有的代码完全不兼容。我该怎么办? 老鸟:这是个常见的问题,很多开发者都会遇到这种情况。你有没有听说过适配器模式? 菜鸟:适配器模式?没有,能详细说说吗? 老鸟:当然可以!这就是我们今天要讨论的主题。适配器模式是一个设计模式,可以帮助我们解决你现在遇到的问题。 渐进式介绍概念 老

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind