单例模式

概述 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式 单例模式Singleton具有如下优点: 多个模块共用同一个对象,保证了数据的唯一性 统一逻辑功能,具有较高的灵活性 在iOS开发中,本身也会接触到不少的系统单例,例如NSNotificaitonCenter通知中心、UIApplication应用单例等类,在swift中主要使用两种方式进行单例的创建,通常我将用户数据存储为单例方便不同模块访...
Click to read more ...

享元模式

概述 实战 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 通过共享已存在的对象,减少创建对象内存开销的设计模式被称作享元模式 享元模式Flyweight和单例模式Singleton像是一对孪生兄弟,二者的表现方式非常相似,但二者的存在目的却不一样: 单例模式 保证了整个应用声明周期内,同一个对象只会存在一份内存,并且任何时间都能被访问使用。 享元模式 如果存在可以复用的对象,那么对象将被共享而不是创建新的对象 在iOS开发中,享元模式的最佳实践就是UITableView的复用机制——超出屏...
Click to read more ...

UITextField的那点事

输入限制 限制扩展 自定义的限制 键盘遮盖 尾语 UITextField被用作项目中获取用户信息的重要控件,但是在实际应用中存在的不少的坑:修改keyboardType来限制键盘的类型,却难以限制第三方键盘的输入类型;在代理中限制了输入长度以及输入的文本类型,但是却抵不住中文输入的联想;键盘弹起时遮住输入框,需要接收键盘弹起收回的通知,然后计算坐标实现移动动画。 对于上面这些问题,苹果提供给我们文本输入框的同时并不提供解决方案,因此本文将使用category+runtime的方式解决上面提到的这些问题,本文假设读者已经清楚从UITextField成为第一响应者到结束编辑过程中的事件调用流程。 输入限制 最常见的输入限制是手机号码以及金额,前者文本中只能存在...
Click to read more ...

按钮动画

关于图层 基础动画 动画组 按钮动画 尾话 在上一篇认识CoreAnimation中笔者介绍了系统的动画库CoreAnimation,使用动画库有很多好处,这里就不再进行重复叙述。那么本篇将承接上一篇的内容,使用提到的基础的动画相关类来实现动画效果,效果图放上: 大体上可以看到demo主要是渐变以及形变两种动画,在更早之前的文章,我们就使用UIView的动画接口完成过相同的动画,而这次将换成CoreAnimation来完成这些工作 关于图层 在iOS中,每一个UIView都拥有一个与之绑定的CALayer图层对象,其负责视图内容的绘制与显示。跟前者一样,CALayer也拥有树状的子图层结构,以及相似的接口方法。CALayer是图层的基类,主要提供了视图显示...
Click to read more ...

聊聊协议

协议应用 什么时候用代理 数据源 协议抽象 结束语 何为协议,简单来说在OC中我们使用关键字@protocol可以声明一个协议,并在协议中添加多个属性、方法供于遵循者实现,从某个角度上来说,这是一种不同于category机制的category。在日常开发中,协议可谓无处不在,最为核心的UITableView通过协议来获取数据、完成事件处理等。下面就是一个最粗浅的协议 @protocol CustomProtocol - (void)doSomething; @end 对于协议的理解,很多的开发者依旧保留在委托-代理等于协议等认知上。然而前者依赖于后者的实现,而后者即便不通过前者也能完成抽象解耦的工作。在...
Click to read more ...

原型模式

概述 简单形式拷贝 登记拷贝 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 通过复制一个已存在的对象来获得一个新的相同类型的对象被称作原型模式,在复制的过程中不需要关心被复制对象实现的接口或者类型 原型模式Prototype具有如下优点: 隐藏了创建对象的实现细节 复制操作不受子类构造器改变影响 避免了重复创建对象产生的大量代码 简单来说,原型模式分为以下两种: 简单拷贝 登记拷贝 没有使用原型Prototype的拷贝代码是怎样的呢?我们需要通过访问 class Pe...
Click to read more ...

去Model化开发

使用背景 实现 尾言 去model化是一种框架设计上的做法,其中的model并不是指架构中的model层,套用Casa大神博客中的原文就是: model化就是使用数据对象,去model化就是不使用数据对象。 常见的去model化做法是使用字典保存数据信息,然后提供一个reformer负责将这些字典数据转换成View层可展示的信息,其流程图如下: 更详细的理论知识可以看Casa大神的去model化和数据对象。本文基于Casa大神的实践基础使用另外一种去model化的实现方式。 使用背景 在很早之前就看过大神的文章,不过一直没有去尝试这种做法。在笔者最近跳入新坑之后,总算是有了这么一次机会。需求是存在着三个非常相似的cell,但分别对应着不同的数据mode...
Click to read more ...