iOS架构设计与优化(三)

之前介绍了在项目层面如何去进行数据解耦和服务中间件的实现,这篇主要介绍在MVC模块内部如何不用MVVM而达到MVVM解耦的效果 我们都知道,MVVM设计模式是在MVC使用过程中日益庞大而不易维护的背景下应运而生的,设计思想和目的都是为C减负,将C中的业务和一些能抽出的逻辑代码抽出到VM中处理,使整体项目结构达到低耦合、高内聚 废话不多说,还是用一个实例来对比说明 页面为一个常规列表页,列表中展示的为订单信息,cell样式根据订单状态可能有两种样式,一种需要付款的状态cell样式,另一种不需要付款的状态cell样式,两种样式的cell高度不同 一种MVVM的实现 // Model struct OrderSummaryModel { var orderNumber: String? var orderState: Int? var orderDescirption: String? var orderAmount: String? var orderCreateDate: String? var orderNeedPay: Bool? = false ... } // View class OrderCommonCell: UITableViewCell { //MARK: Property var orderNumbrerLabel: UILabel! var orderStateLabel:…

Read this article

Swift性能相关

由于Swift4已经趋于稳定,最新的项目开始使用Swift开发,之前只是在自娱自乐中用过Swift,并未进行深入研究和应用到实际开发,而且还有一些疑惑,这几天查阅相关资料之后做了一些总结 Swift中的类型 平凡类型 有些类型只需要按照字节表示进行操作,而不需要额外工作,我们将这种类型叫做平凡类型 (trivial)。比如,Int 和 Float 就是平凡类型,那些只包含平凡值的 struct 或者 enum 也是平凡类型 struct AStruct { var a: Int } struct BStruct { var a: AStruct } //AStruct和BStruct都是平凡类型 引用类型 对于引用类型,值实例是一个对某个对象的引用。复制这个值实例意味着创建一个新的引用,这将使引用计数增加。销毁这个值实例意味着销毁一个引用,这会使引用计数减少。不断减少引用计数,最后当然它会变成 0,并导致对象被销毁。但是需要特别注意的是,我们这里谈到的复制和销毁值,只是对引用计数的操作,而不是复制或者销毁对象本身 struct…

Read this article

iOS架构设计与优化(二)

上篇提到利用数据分层思想来解耦项目代码和逻辑,数据分层一个很重要的工具就是Service类,这篇就重点介绍Service的实现和属性的动态装配 服务类的注册实现 要实现某个服务,本质就是实现一套协议方法,其他语言中协议方法也叫做一套接口,还是拿之前的数据获取服务举例: @interface LYIPAggregationBusinessDatas : NSObject <ExportableProtocol, LYIPAggregationBusinessDatasProtocol> @end @implementation LYIPAggregationBusinessDatas LY_EXPORT_SERVICE_FOR_PROTOCOL(LYIPAggregationBusinessDatasProtocol, NO); - (LYSignal<NSArray<LYAggregationMenuItemDetail *> *> *)allMenuItems { return [[@"/v1/guest/goodsCategory".http_get parameters:nil] resultMap:^id(id value) { return [LYAggregationMenuItemDetail ly_objectArrayWithKeyValuesArray:…

Read this article

iOS架构设计与优化(一)

前言 随着移动开发的浪潮逐渐退去,现在对于移动开发工程师的要求越来越高,不在仅仅满足于能完成项目所需的功能于界面的搭建,对于底层和架构的理解对于现在的开发越来越重要,在此有一点架构的设计经验可以与大家分享和探讨 传统移动MVC设计模式 在长久以来的开发过程中,我们有使用着用途最广,使用者众多的MVC设计模式。但是,随着开发的进行,MVC产生的问题越来越多,控制器层的代码无法控制,代码越来越难以维护和迭代。每当产品来提出新的需求,程序猴子们的大刀早已饥渴难耐了,但是又不得不陷入继续打补丁版本更新无尽的循环中··· 是MVC已经被时代淘汰了吗? 可能我们没有使用正确的姿势 深入理解MVC中的M Model不只是一个数据模型,更是一个处理数据产生、获取、逻辑处理中心,不能只单单理解为一个数据模型,我们在开发中使用的Model只是这个数据中心中很小很小的一个部分。而在这个数据中心中,我们又应该将这个中心分层,比如可以分为Service层用来处理业务逻辑、DAO层处理数据库逻辑、Protocol层来封装一些某些功能接口等等。在此,我使用JAVAWeb中的一个图来描述此设计模式是再好不过了,如下: 移动开发过程中不涉及Web服务器层,但是后面两部分的设计思想可以很好的借鉴和使用到移动开发中,特别是Service层的设计,由于在Java中除了类能封装某一些特定的功能之外,还提供了给我们interface来封装某一些特定的功能,一是用来避免使用类的重量级剔除三大特性,二是能解决不相干的类中包含一些共同的方法的问题。在iOS中,我们就可以大肆使用protocol来解决分层中的许多问题,现在越来越火的POP面向协议编程也就是利用的这一思想。欣慰的是,在Swift版本不断迭代过程中,苹果也越来越重视和推崇这一思想,在Swift中也不断优化,方便开发者使用,…

Read this article

In Japan

Journey to Japan In 2018.1…

Read this article