ios app开发步骤
虽然开发一个app的任务看上去可能很艰巨,但是整个过程可以抽象成几个相对简单的步骤,下面这些步骤会在你开发第一个app时帮你步入正途。
定义Concept
每个好app都是从一个concept开始。
获得这个concept的最好方法就是考虑你打算用你的app解决什么问题,好的app解决的问题都是单一,定义清晰的问题,比如,Settings app允许用户调整设备的所有设置,它给用户提供了一个独立界面让用户来完成一系列相关的任务。
下面是获得一个好concept的一些关键问题:
受众是谁?你app的内容和体验取决于你要写的是儿童游戏,待办事项app,还是个用于自己学习的测试app。
App的目的是什么?App有给定义清晰的目的非常重要,其中包括用户使用你的app的动力是什么。
你的app要解决什么问题?App应该很好地解决某一个问题,而非为多个不同的问题提供解决方案,如果你发现有多个不相关的问题要解决,你或许应该考虑多写几个app。
你的app要包含什么内容?想想你的app会呈现什么样的内容给用户,他们会怎样与之互动。设计一个用户能补充你呈现的这种内容的界面。
这个concept未必要在开始开发时就完美且完整,但清楚知道你的方向以及怎样走向这个方向总是好的。
设计UI
有了concept,创建一个成功app的下一步就是设计一个好的UI,应该让用户能用最简单的方式和app互动,设计界面时始终为用户着想,要高效,清晰,直接。
或许构建UI最具挑战的就是把concept转换成设计,然后实现这个设计。Storyboard就是为了简化这个过程,它让你能在图形环境中同时完成界面的设计和实现。你能直接看到你构建的效果,随时获知哪些设计可行,哪些不可行,随时修改。
在storyboard中工作时构建的是各种view,它把内容显示给用户,简单上手可见iOS开发教程:基础。
定义互动
UI不能没有逻辑在背后支撑,创建界面后,还要写代码来定义用户如何与他看到的东西互动,以及界面如何响应。
开始考虑给界面添加行为之前,有必要知道iOS app基于事件驱动的编程,在事件驱动编程中,app的flow(工作流)由event(事件)决定,event包括:系统事件和用户动作。用户在界面上实施动作,触发app中的event,这些event触发app逻辑的执行及相关数据的处理,然后app对用户动作的响应反映在界面上。
定义用户怎样和界面互动时,要始终考虑事件驱动的概念,因为app代码执行时进行操作的会是用户,而不是开发者。你必须清楚用户能实施什么样的动作,以及app怎样响应。
多数event处理逻辑都是在view controller中定义的,详见其他相关教程。
实现行为
定义用户能在app中实施哪些动作之后,就可以写代码来实现相应行为了。
写iOS app代码,大部分时间都是和Objective-C编程语言打交道。Objective-C在C语言的基础上提供了面向对象能力以及一个动态runtime,拥有所有熟悉的C语言元素,如基本数据类型(int, float等),结构,函数,指针和控制流(while, if...else, 以及for),还可以使用C标准库的函数,比如stdlib.h和stdio.h中声明的函数。
对象是构建app的砖块
构建iOS app时,多数时间都是在和对象打交道。
对象封装了数据和相关的行为。可以把一个app想象成一个互相关联的对象组成的生态系统,这些对象互相通讯,解决特定的问题,如显示一个可视化界面,响应用户输入,或储存信息。使用多种不同的对象来构建你的app,从按钮文字这些界面元素,到字符串及数组这样的数据对象。
类是对象的蓝图
类用来描述某种对象共有的行为和属性。
根据同一个蓝图建造出来的多个建筑物都会拥有一样的结构,同样,一个类的每个实例都有一样的属性和行为,你可以写你自己的类或使用framework定义好的类。
通过分配内存和赋初值可以创建一个类的实例,从而获得一个对象。Allocate(分配内存)时,会给对象分配足够的内存并全部赋零。Initialization(初始化)是把对象的初始状态——即实例的变量和属性——设置为合理的值,然后返回这个对象。Initialization的目的就是返回一个可用的对象,使用前你必须allocate并initialize这个对象。
Objective-C的基本概念之一就是类继承,即一个类继承其父类的行为。当一个类继承另一个时,子类会继承父类定义的所有行为和属性,子类可以另外定义它自己的行为和属性或者override(覆盖)父类的行为,这样可以让你能够扩展一个类的行为而无需重复其已存在的行为。
对象间用消息来通讯
对象间通过在运行时互相发送消息来进行互动,在Objective-C的术语中,一个对象通过对另一个对象进行方法调用来给它发送消息。
尽管Objective-C中在对象中发送消息有好几种方法,但目前最常用的还是用方括号这种基本语法。如果有一个Person类的对象somePerson,可以这样给它发送sayHello消息:
[somePerson sayHello];
左边的somePerson引用,是消息的接收者。右边的sayHello消息即是会被调用的接收者方法名。换言之,上面的代码执行时,somePerson会收到sayHello消息。
用Protocol来定义消息传递方式
Protocol可以定义一系列特定情况下供对象使用的行为,protocol以程序接口的形式定义,任何类都可以选择实现。两个没有继承关系的类可以用protocol互相通讯,实现功能。
任何可以为其他类提供有用行为的类都可以用声明程序接口的方式匿名提供这些行为,任何其他类也都可以选择采用这些protocol并实现其一个或多个方法,利用这些行为。
组织数据
实现app的行为后,你要建立一个数据模型来支撑app的界面,app的数据模型定义了app数据的维护方式,从基本的对象索引到复杂的数据库都属于数据模型。
app的数据模型应该反映其内容和目的,界面和数据之间应该有明确的相关性,尽管用户不会直接和数据进行互动。
好的数据模型对建立app的坚实基础很重要,它会让app更加灵活,可以更容易地对功能进行改进。
使用正确的资源
设计模式是app解决一般问题的最佳途径,用设计模式可以帮助你定义数据模型的结构,以及数据模型怎样和app其他部分互动。在理解并使用了正确的设计模式后,可以很轻松地创建出简单高效的app。
开始实现你的模型时,不是所有东西都要从头开发,有很多现成的framework可以使用,比如,Foundation framework包括了表示基本数据类型的类——如字符串和数字——以及用来存储其他对象的集合类。建议尽可能使用已有的framework类——或者通过继承它们的方式加入你自己app的功能——而尽量不要尝试重新实现它们的功能,以便创造出高效精巧的app。
通常你还需为你的数据模型写一些自定义类,以管理控制app的内部构造。
组织真实数据
一开始测试数据模型时,一般是用静态的假数据,这样可以在使用真实数据之前先确定模型是否已经能正常工作了,确定之后,再引入真数据不迟。