iOS中常用开发设计模式总结

snowFlake OC 雪花算法 实现 注意,41 位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) 得到的值,这里的的开始时间截,一般是我们的 id 生成器开始使用的时间,由我们程序来指定的(如下面程序 IdGenerator 类的。原生的 Snowflake 算法是完全依赖于时间的,如果有时钟回拨的情况发生,会生成重复的 ID,市场上的解决方案也是不少。由于 long 基本类型在 Java 中是带符号的,最高位是符号位,正数是 0,负数是 1,所以 id 一般是正数,最高位是 0。 阅读详情

--------iOS中常用开发设计模式总结

可用性和可扩展性是我们采用这些设计模式的主要目的。

(一)代理模式

应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。委托是一个强大的设计模式,因为它无需创建子类就可以扩展该类的功能。

优势:解耦合

敏捷原则:开放-封闭原则

实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。

列表row个数delegate

自定义的delegate



(二)观察者模式

应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

优势:解耦合

敏捷原则:接口隔离原则,开放-封闭原则

实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。

kvo,键值对改变通知的观察者,平时基本没用过。



(三)MVC模式

应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

优势:使系统,层次清晰,职责分明,易于维护

敏捷原则:对扩展开放-对修改封闭

实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。

模型队象:封装应用程序的数据,并定义操作这些数据的方法。数据模型的一大特点就是可以重复使用,当数据载入应用程序时,大部分的数据都应该驻留在数据模型中。 用户在视图界面中所做的更改,将会传送给控制器并由控制器创建或者更新模型对象。模型对象发生更改时,它将会通知控制器并由控制器来修改视图中所显示的内容。也就是说,模型对象不可以直接与视图进行通讯,必须以控制器作为桥梁。

视图对象:视图对象时用户可以看到的对象,它知道如何在屏幕上呈现自己并且可能与用户进行交互。视图的主要目的就是显示来自模型对象的数据。

控制器:控制器在MVC架构中充当的是桥梁、媒介的角色。通过它,模型对象和视图对象可以了解到各自的更改。



(四)单例模式

应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

优势:使用简单,延时求值,易于跨模块

敏捷原则:单一职责原则

实例:[UIApplication sharedApplication]。

注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,

返回的也只是此单例类的唯一静态变量。



(五)策略模式

应用场景:定义算法族,封装起来,使他们之间可以相互替换。

优势:使算法的变化独立于使用算法的用户

敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。

实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。

注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类

2,变化的行为抽象基类为,所有可变变化的父类

3,用户类的最终实例,通过注入行为实例的方式,设定易变行为

防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。



(六)工厂模式

应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。

优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。

敏捷原则:DIP依赖倒置原则

实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换

注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,

增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。


iOS开发设计模式篇第三篇MVP设计模式 本文系统介绍了iOS开发中的MVP设计模式。针对MVC模式导致的Controller臃肿问题,MVP通过分离职责解决:View只负责展示,Presenter处理业务逻辑,Model管理数据。文章详细阐述了MVP的核心原则(View不直接访问Model、Presenter不依赖UIKit等),并通过用户信息展示示例演示了具体实现。与MVC/MVVM对比,MVP具有业务逻辑集中、易于测试等优点,但也存在类数量增多的缺点。最后指出MVP特别适合业务复杂的项目,在实际工程中可结合Router、Service等进一步 阅读详情

相关推荐

应急响应靶场练习Linux-web-2

本次应急响应靶机采用的是知攻善防实验室的Linux-2应急响应靶机靶机下载地址为:相关账户密码: root/Inch@957821.(第一个为大写的i,记住要带最后的点.)1.该攻击者的IP为192.168.20.12.攻击方式应该是通过/index.php?user-app-register上传了一个webshell,然后使用蚁剑管理webshell之后再次上传version2.php进行提权.3.攻击者修改了phpmyadmin数据库的管理员密码。

tddkett的博客 2800

ID生成 : 雪花算法(snowflake)

背景 Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。 雪花算法简单描述:  最高位是符号位,始终为0,二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 41位的时间序...

nO0b 2625

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

Snowflake(雪花算法)

/** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br> * 1位标识,由于long基本类型在Java中是带符号的,最高...

点点的博客 2154

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3741

【FPGA】AD9694调试注意事项

基于FPGA的AD9694设计及其注意事项,包括同步的设计注意事项

weixin_41246509的博客 2899

Twitter-Snowflake,64位自增ID算法详解

Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。 Snowflake算法核心 把时间戳,工作机器id,序列号组合在一起。     除了最高位bit标记为不可用以外,其余三组bit占

wintree的专栏 4554

IDC 数据中心工程师面试题汇总

(适用于:IDC运维、机房值班、机房工程师、机柜运维、IDC基础设施、IDC网络运维岗)

老韩的Linux云计算架构师进阶之路 1069

雪花算法(snowflake)

雪花算法简单描述: + 最高位是符号位,始终为0,不可用。 + 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。 + 10位的机器标识,10位的长度最多支持部署1024个节点。 + 12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。看

明月阁 6万+

[系统安全] 三十二.恶意代码检测(2)常用技术详解及总结

前文从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识,在学术界方面,用类似于综述来介绍攻击追踪溯源的不同方法;在产业界方面,主要参考李东宏老师从企业恶意样本分析的角度介绍溯源工作。这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。希望这篇文章对您有所帮助,如果文章中存在错误、理解不到位或侵权的地方,还请告知作者与海涵。且看且珍惜,加油~

杨秀璋的专栏 1万+

Oracle EBS Tax 四国实现详解:印度、巴西、美国、阿根廷

印度:务必启用India Localization模块,不要尝试用标准EBTax模拟GST逻辑 巴西:必须配置NF-e接口,建议聘请本地税务顾问设置CFOP和NCM代码映射 美国:跨州业务强烈建议购买Vertex或Avalara服务,自建税率表维护成本极高 阿根廷:注意1:1:1架构限制,提前规划Legal Entity和OU结构

金牌架构师 260

iOS开发中常用的设计模式

常见的设计模式:MVC模式、观察者模式、代理模式、单利模式、工厂模式、策略模式 一、MVC模式 MVC模式是一种复合设计模式,通过数据模型(model)、视图展示(View)、控制器逻辑(controller)将应用程序进行逻辑划分。 优点:使系统、层次清晰、职责分明、易于维护 敏捷原则:对扩展开发-对修改封闭 模型:保存应用数据的状态,回应视图对应状态的查询,处理应用业务逻辑,完成应用的功...

qq_33632487的博客 603

lammps教程:ovito免费输出高清图片方法

基本原理是调用ovito软件包中的TachyonRenderer模块,该模块可实现Tachyon渲染,达到和ovito 2.9 Tachyon完全相同的效果。这种方法在后来的ovito版本中已经不能使用,但是ovito 2.9版本在后处理方面功能较少,使用起来也不是特别方便。在之前的推文中,曾介绍过使用ovito 2.9版本更换Tachyon渲染器实现高清图片的输出。这个方法只需要配置ovito模块即可,完全免费,不需要购买ovito pro版。具体的配置参数可到ovito官网查询。大家好,我是小马老师。

lammps_jiayou的博客 2758

iOS中常用的几种设计模式

今天就在多写一点,总结一下自己在开发中经常用的一些设计模式。亲身体验,如有纰漏,请批评指正。 感谢大家的关注! 介绍:MVC设计模式,代理模式,工厂模式,单例模式,观察者模式

四两拨千斤 1237

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS开发设计模式篇第一篇MVC设计模式

MVC(Model-View-Controller)是一种常见的软件设计模式,旨在将应用程序的逻辑、用户界面和输入进行分离。在iOS开发中,MVC帮助开发者组织代码,提高可维护性和可扩展性,使得项目结构更加清晰。本文将介绍MVC的基本概念、在iOS中的具体实现、优缺点、实践建议,以及其他常见的架构模式。

我叫柱子哥 2564

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS开发设计模式篇第二篇MVVM设计模式

在本文的代码中,我们提供一个初始化的方法,把Model中的数据转成要展示的name和age属性,同时我们通过KVO的方式监听UserModel中的变化,实时获取变化之后的最新值。MVVM 是一种强大的设计模式,在 iOS 开发中,特别是复杂的应用程序中,它能显著提高代码的可维护性和扩展性。ViewModel(视图模型层):负责将 Model 转化为 View 可以使用的数据,同时接收 View 的操作并更新 Model。在本文的例子中,Model表示示例中使用到的数据模型,即用户名和年龄。

我叫柱子哥 2374

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS开发设计模式详解

在软件开发中一般认为有23种设计模式(design pattern),这是软件开发中的较高的境界了。在iOS开发中最常用的有哪些设计模式呢?我们今天来分析一下: 一.【代理模式】 使用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。其实就像是Java中的接口,类可以实现或者不实现协议(接口)中的方法。 优点:低耦合。 使用原则:开闭原则。 实例:TableVi

乞力马扎罗的雪CYF的博客 4832

简析iOS开发设计模式的各自分析对比

以iOS与Android为代表的移动互联网迅速崛起,形成了在移动平台开发中为主的iOS与Android职业培训,这些都催生了iOS系统开发行业的蓬勃兴起。下文主要介绍了ios开发的几种设计模式。   一、代理模式   应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。   优势:解耦合   敏捷原则:开放-封闭原则  

ccnanxi的博客 431

iOS开发设计模式

ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。 优势:解耦合 敏捷原则:开放-封闭原则 实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。 列表row个数delegate 自定义的delegate...

Watchmen0320的博客 103

iOS开发设计策略模式

在iOS开发中,使用官方框架,官方sdk中,可以接触到不少设计模式,可能平时没有注意,实际上已经用到了不少设计模式

我生苍茫 1336

蓝鸥ios培训视频教程-c语言高级,蓝鸥ios分享ios开发设计模式那点事

在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存。所以苹果提供了一个UIAccelerometer的实例化方法+sharedAccelerometer,从名字上我们也能看出此方法让整个应用共享一个UIAcceleromete...

weixin_35215225的博客 218

IOS塔防游戏《坦克对大炮》的开发设计记录

IOS塔防游戏《坦克对大炮》的开发设计记录 引子     游戏已经在App Store上线几个月了,一直很想写点什么记录一下。真要写的时候,却又发现无从下笔没啥好写的。在2012年进入IOS,对于独立游戏开发来说,已经很晚了。前两三年抓住机会的独立开发者多少已经掘到了第一桶金。12年的时候IOS移动游戏已经炙手可热, 大量的公司和小团队涌入。App Store刷榜横行,榜单

z3m4l的专栏 2987

IOS开发中的几种设计模式介绍

ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。 优势:解耦合 敏捷原则:开放-封闭原则 实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。 列表row个数delegate 自定义的delegate

liwei3gjob的专栏 6万+

iOS开发~细聊设计模式

文章目录 一、概述 二、框架模式,框架,设计模式 1.首先搞清楚这三个概念: 总结 一、概述 无论是初出茅庐还是代码老手,平时工作或面试的时候,经常会提到“设计模式”这个词,还记得刚接触iOS还不算入门的时候,第一次给领导汇报工作进度,就把MVC设计模式写在报告里,瞬间感觉自己写的东西好像专业一些了! 后来接触项目越来越多,MVC更是耳熟能详,但随着学习积累,突然发现以前学东西不够系统和全面。那么问题第一个问题来了,MVC是不是设计模式?面试中也经常会问,例如:你经...

阿福的专栏 1351

IOS开发设计思路

我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式。我先给大家介绍一下这两种模式的特点。 上帝模式 处于上帝模式时,我需要构思整个应用的架构设计,如何进行类之间的组织和信息的传递。我有可能会在纸上画一些类图,把关键的几个类之间关系构思清楚。这就类似于建筑师画设计图纸一样。 在这个阶段,我的大脑是努力工作的,我会利用我学到的《设...

weixin_34409741的博客 203
上一篇: UITextView用法总结
下一篇: NSString转换成NSURL
Snowflake_light
博客等级 码龄12年 4粉丝 25原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值