虽然开发一个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的内部构造。

组织真实数据
一开始测试数据模型时,一般是用静态的假数据,这样可以在使用真实数据之前先确定模型是否已经能正常工作了,确定之后,再引入真数据不迟。

ios app开发步骤的更多相关文章

  1. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  2. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  3. iOS App开发的那些事儿2:如何搭建合适的框架

    <iOS App开发的那些事儿>系列文章从更宏观的角度出发,不仅仅局限于具体某个功能.界面的实现,而是结合网易云信iOS端研发负责人多年的经验,从如何优化现有代码的角度出发,深度分析如何创 ...

  4. iOS App开发的那些事儿1:如何建立合适的规范

    <iOS App开发的那些事儿>系列文章从更宏观的角度出发,不仅仅局限于具体某个功能.界面的实现,而是结合网易云信iOS端研发负责人多年的经验,从如何优化现有代码的角度出发,深度分析如何创 ...

  5. iOS App开发那些事:如何选择合适的人、规范和框架?

    http://www.cocoachina.com/ios/20141202/10386.html 自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实 ...

  6. ios app 开发中ipa重新签名步骤介绍-备

    作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...

  7. ios app 开发中ipa重新签名步骤介绍

    作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...

  8. ios App 开发指南

    开发者账号申请 http://www.applicationloader.net/blog/zh/547.html https://zhuanlan.zhihu.com/p/66118041 http ...

  9. Node.app – 用于 iOS App 开发的 Node.js 解释器

    Node.app 是用于 iOS 开发的 Node.js 解释器,它允许最大的代码重用和快速创新,占用资源很少,为您的移动应用程序提供 Node.js 兼容的 JavaScript API.你的客户甚 ...

随机推荐

  1. Css3 javascript 写的分类

    不兼容IE10以下的浏览器 <!DOCTYPE html> <html> <head> <meta charset=utf-> <title> ...

  2. Java在ACM中的使用

    1.基本框架   import java.oi.*;   import java.util.*   public class Main   {   public static void main(St ...

  3. python中的列表和字典

    列表和字典的区别: 列表是有序排列的一些物件,而字典是将一些物件(键)对应到另外一些物件(值)的数据结构; 应用场景: 字典 各种需要通过某个值去查看另一个值的场合,也就是一个虚拟的“查询表”,实现方 ...

  4. NVIDIA 显卡温度提示过高,显卡温度高99度怎么办?

    你可能没有在意您的NVIDIA(英伟达)显卡温度,那么你就不会知道显卡温度过高如何导致的呢?也不会知道如果去解决显卡温度过高的问题了,在此我希望在电脑玩游戏或者在办公中电脑速度快慢,或者发热的情况下, ...

  5. 一次awk脚本的重构

    # 脚本功能说明: # . 检查URL中的域名是否是指定版本的域名 # . 对访问bid,authorid的游客身份排重,并累加其pv # 全局变量说明 # DOMIAN_LIST 是数组,key是要 ...

  6. BZOJ3564 信号增幅仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=3564 思路:先旋转坐标系,再缩进x坐标,把椭圆变成圆,然后做最小圆覆盖. 还有,为什么用srand( ...

  7. QT 让窗口(或控件)居中

    代码如下: XXX::XXX(QWidget *parent /* = 0 */) { .................. //注意,resize一定要放在这段代码的前面 resize(300, 3 ...

  8. mkbundle(1) - Linux man page

    mkbundle(1) - Linux man page Name mkbundle, mkbundle2 - Creates a bundled executable. Synopsis mkbun ...

  9. 8.2.1.4 Index Merge Optimization 索引合并优化:

    8.2.1.4 Index Merge Optimization 索引合并优化: 索引合并方法是用于检索记录 使用多个 范围扫描和合并它们的结果集到一起 mysql> show index fr ...

  10. 2015第24周五Spring的AOP

    AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果.但AOP的应用场合是受限的,它一般只适合于那些具有 ...