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

I/O

同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO 一 几个概念 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间 进程切换 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换。因此可以说,…

Read this article

iOS性能优化方案

Read this article