iOS开发基础理论知识
主流框架
首先,什么是框架:其实就是软件架构,是有关软件整体结构与组件的抽象描述
1、标签式/分栏式:通过导航控制器之间的切换; 分栏控制器下添加导航控制器,导航控制器的rootVC是列表页
2、单页式/直推式: 导航推出,分类连接是首页点击view实现
3、scrollView滚动式:scrollview控制的viewcontroller分别控制视图切换
4、抽屉式/侧滑式:依赖于一个第三方库
设计模式
一、概念
MVC(Model-View-Controller)是模型-视图-控制器的简称,属于iOS项目开发中最常用的一种设计模式,在实际项目开发中,一般用MVC模式来搭建整个项目的框架。
二、详细介绍
1、Model(模型对象)
模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。用户在视图层所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。模型对象更改时会通知控制器对象,控制器对象更新响应的视图对象
2.View(视图对象)
视图对象是应用程序中用户可以看见的对象,视图对象知道如何将自己绘制出来,并可能对用户的操作做出响应,视图对象的主要目的,就是现实来自应用程序模型对象的数据,并使该数据可被编辑。
3.Controller(控制器对象)
在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。
分解为三点:
1.Model和View不能相互通信,只能通过Controller传递
2.Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信
3.Controller可以直接与View对话,View通过action向Controller报告事件的发生,Controller是View的直接数据源(数据很可能是Controller从Model取得并经过加工了),Controller是View的代理,以同步View与Controller
三、在项目中的实现
设计模式—工厂方法
一、概念
工厂方法模式:定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。
二、使用场景
1、编译时无法准确预期要创建的对象的类;
2、类想让子类决定在运行时创建什么;
3、类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部;
三、在OC中的实现
1、定义通过工厂方法创建的类的统一父类(例如:Animal)和通过工厂方法创建的各个类(例如:Dog、Cat等),并为各个子类提供初始化细节。
//通过工厂方法创建类的实现举例
- (id)initWithName:(NSString*)name{
if(self = [super init]){
self.name = name;
//添加初始化相关细节
...
}
return self;
}
2、定义生成器父类(例如:AnimalGenerator)和各个生成器子类(例如:DogGenerator、CarGenerator)
3、生成器父类中创建工厂方法、各个生成器子类中重载该方法
//AnimalGenerator中工厂方法
- (Animla*)animalWithName:(NSString*)name{
return [[Animal alloc] initWithName:name];
}
//DogGenerator对AnimalGenerator中工厂方法的重载
- (Animal*)animalWithName:(NSString*)name{
return [[Dog alloc] initWitName:name];
}
4、使用
DogGenerator *dogGenerator = [[DogGenerator alloc] init];
//不同生成器创建不同的动物
Animal *dog = [[dogGenerator animalWithName:@"小七"]];
四、在项目中的实现
设计方法—策略模式
一、概念
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者 策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能
二、现实例子
1.一个菜单功能能够根据用户的“皮肤”选项来决定是采用水平的还是垂直的排列形式。同时可以灵活增加菜单那的显示样式。
2.出行旅游:我们 可以有几个策略可以考虑:可以骑自行车,汽车,做火车,飞机。每个策略都可以得到相同的结果,但是它们使用了不同的资源。选择策略的依据是费用,时间,使用工具还有每种方式的方便程度 。
三、解决方案
定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
策略模式把对象本身和运算规则区分开来,其 功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。
四、iOS中的应用
1.在验证用户输入的表单的时候,加入包括电话输入框的验证和邮件输入框的验证,这两部分的验证算法是不同的,如果把这个算法看成一个函数,他几乎有相同的输入参数和返回参数。我们可以把这个相同的函数可以抽象为基类的一个方法,然后抽象出两个具体的策略类:电话验证类和邮件验证类,他们需要在各自的实现里面去复写父类的验证方法
2.排序算法,NSArray的sortedArrayUsingSelector
项目特点:
1、项目周期短,团队人数较少
2、项目一般采用快速迭代的方式增加功能或者更新需求(版本迭代)
一、项目开发前的准备工作:
1、客户端的人员需要根据项目的接口说明文档,进行开发工作,与服务端的人员进行沟通。 如果服务端没有开发完毕,客户端与服务端的人员要先出接口说明文档,两个团队并行开发。
2、产品经理要出软件的需求说明文档,说明软件的业务逻辑,还要根据产品原型设计工具:Axure,出产品原型,技术人员需要跟进需求文档的定制,分析需求的可行性。
3、美工需要根据产品原型,给出软件(最终)的UI效果图和切图:
(1) 跟美工沟通,切图的尺寸
(2) 在不影响清晰度的情况下,切图占的磁盘空间越小越好。
二、iOS项目开发的通用技巧:
1、兼容性的问题:
(1)操作系统的兼容性(软件要兼容到iOS6.x)
(2)界面的兼容性(iPhone6s和iphone6、plus、5、4s)
2、项目实现,在构建类之前,需要建不同的文件夹,不同的类要进行不同的归类(mvc指的是model、view,controller,实现的是模型和视图的分离,M和V的低耦合)
3、应用程序开发:
(1)UI的逻辑(软件的UI架构和必要的视图封装)
(2)客户端与服务端的交互
(3)数据的解析
(4)数据存储
4、UI的逻辑: (视图的封装,与外界交互可以通过代理方法或者闭包实现)
5、客户端与服务端的交互: 命令模式
封装请求类(HttpRequest),每个接口对应一个request对象 ,如果接口过多,可以封装请求管理类(HttpRequestManager)来统一管理多个request对象的生命周期
6、数据解析(json,xml)
7、数据存储: (共同特点:数据存储在本地)
(1)数据缓存:(为了避免客户端与服务端频繁交互,造成资源浪费,提升用户体验、省电、省流量,客户端自动将数据写在本地,数据的有效期由开发者控制)
(2)数据的持久化存储(eg:新闻的收藏)数据的有效期完全由用户控制
8、软件设计模式:常用的有MVC、代理、工厂、KVO,单例等