原型模式

概述 简单形式拷贝 登记拷贝 总结 设计模式(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 ...

MVC架构杂谈

如何分层 模型Model应该放什么代码 I/O操作 视图层的Self-Manager 视图层的动画效果 瘦身Controller 尾言 MVC是软件工程中的一种软件架构模式,它把软件系统分为三个基本的部分:模型Model、视图View以及控制器Controller。这种模式的目的是为了实现一种动态的程序设计,简化后续对软件系统的修改和扩展,并使得程序的某一部分的复用成为可能。三个部分按照其各自的职责划分: 数据Model: 负责封装数据、存储和处理数据运算等工作 视图View: 负责数据展示、监听用户触摸等工作 控制器Controller: 负责业务逻辑、事件响应、数据加工等工作 在传统的MVC结构中,数据层在发生改变之后会通...
Click to read more ...

JavaScript交互

坑爹时代 当前混合开发模式迎来了前所未有的发展,跨平台开发、热更新等优点决定了这种模式的重要地位。虽然前端界面在交互、动效等多方面距离原生应用还有差距,但毫无疑问混合开发只会被越来越多的公司接受。在iOS中,混合开发模式被分为两个时代,分别是iOS7之前的坑爹时代与之后的黄金时代,其分割代表为JavaScriptCore框架 坑爹时代 作为完美避开iOS7之前版本的幸运儿,我只能从某位前辈的口中得知那悲惨的岁月。作为那个年代唯一能与前端界面交互的手段就是UIWebView,先不说它自身的内存泄露缺陷,下面是一段前辈写过的代码: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRe...
Click to read more ...

模板模式

概述 坏味道的代码 模板设计模式 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 模板设计模式是最基础的设计模式之一,在网上被称作模板方法模式,但实际运用时这种设计模式却不仅仅局限于方法。因此笔者对于模板设计模式的理解定义如下: 【模板设计模式】将常见的方法以及对象成员进行封装,创建了一个实现一组抽象方法以及抽象对象成员作为对象实现使用的模板 坏味道的代码 在Swift中有个有趣的数据结构——元组Tuples,现在有这么一段代码。其中传入的每一个元祖表示某个商品的数据类型: func calcul...
Click to read more ...

SirKit应用

创建Intents Extension 代码实现 事件UI 尾言 在6月14日凌晨的WWDC2016大会上,苹果提出iOS10是一次里程碑并且推出了十个新特性,大部分的特性是基于iPhone自身的原生应用的更新,具体的特性笔者不在这里再次叙述,请看客们移步WWDC2016下载自行观赏。要说里程碑在笔者看来有些夸大其实了,不过新增的通知中心联动3D Touch确实为人机交互带来新的发展,另外一个最大的亮点在于Siri的接口开放。在iOS10中提供了SiriKit框架在用户使用Siri的时候会生成INExtension对象来告知我们的应用,通过实现方法来让Siri获取应用想要展示给用户的内容 在iOS10之后,苹果希望Siri能够给用户带来更多的功能体验,基于这...
Click to read more ...

认识CoreAnimation

在iOS中,普通的动画可以使用UIKit提供的方法来实现动画,但如果想要实现复杂的动画效果,使用CoreAnimation框架提供的动画效果是最好的选择。那么两种动画方案相比之下,后者存在的主要好处包括不仅下面这些: 轻量级的数据结构,可以同时让上百个图层产生动画效果 拥有独立的线程用于执行我们的动画接口 完成动画配置后,核心动画会代替我们完全控制完成对应的动画帧 提高应用性能。只有在发生改变的时候才重绘内容,消除了动画的帧速率上的运行代码 在CoreAnimation框架下,最主要的两个部分是图层CALayer以及动画CAAnimation类。前者管理着一个可以被用来实现动画的位图上下文;后者是一个抽象的动画基类,它提供了对CAMediaTiming和CA...
Click to read more ...