第二部分构建应用程序

  1,应用程序开发过程

  2,设计用户界面

  3,定义交互

  4,教程:串联图

1,应用程序开发过程

  • 定义概念

  • 设计用户界面

  • 定义交互

  • 实现行为整合数据

    •  对象是应用程序的基石
    •  类是对象的蓝图
    •  对象通过消息通信
    •  协议定义消息发送契约
  • 整合数据

消息通信:

在 Objective-C 中,虽然可使用多种方法在对象之间发送消息,但是目前最常用的方法是使用方括号的基本语法。如果您有一个 Person 类的对象 somePerson,那么可以按照如下所述来向它发送消息 sayHello:
          [somePerson sayHello];
左侧的引用 somePerson 是消息的接收者。右侧的消息 sayHello 是调用其方法的名称。换句话说,执行以上代码行时,会向 somePerson 发送 sayHello 消息。

协议定义消息发送契约:

  协议定义对象在给定条件下的一组预期行为。它采用可编程的接口形式(任何类都可以选择来实现)。通过使用协议,两个因为继承而略有关联的类可以彼此通信来完成某个目标,例如解析 XML 代码或拷贝对象。

  如果类能够提供为其他类使用的行为,那么该类可以声明可编程的接口,以匿名方式来供应该行为。任何其他类都可以选择采用该协议,并实现该协议的一个或多个方法,从而利用该行为

2,设计用户界面 3,定义交互

视图层次

UIKit视图对象是UIview类或其中一个子类的实例。UIKit框架提供了许多类型的视图,来帮助呈现和组织数据。

UIKit 大体可分为以下七种常见类型:内容;集;控制;栏;输入;容器;模态

3,定义交互

视图控制器

...

教程:串联图

本教程将向您讲述如何:

  • 采用“Auto Layout”为用户界面增添灵活性
  • 使用串联图来定义应用程序内容和流程
  • 管理多个视图控制器
  • 给用户界面中的元素添加操作

Xcode 能给串联图添加新的导航控制器、为其设定初始场景,并在新的导航控制器和现有的表格视图控制器之间建立关系。在画布上,如果您选择了连接两个场景的图标,就会发现这其实是一种根视图控制器关系。这表示导航栏下方显示的内容视图将为表格视图。初始场景设定为导航控制器,因为导航控制器保留了将显示在应用程序中的所有内容,它是待办事项列表和“add-to-do-item”场景的容器。

整合数据

应用程序的数据模型由数据结构和(可选)自定业务逻辑组成;

模型设计

  需要考虑的问题:数据是什么类型的,数据结构是什么类型的

模型实现

使用设计模式

  模式是抽象设计,而非代码。

MVC

  模型 - 视图 - 控制器

  模型会记录应用程序的数据,视图会显示用户界面并构成应用程序的内容,而控制器则会管理您的视图。

目标-操作

  目标-操作从概念上讲是一个简单的设计:特定事件发生时,一个对象会向另一个对象发送信息。操作信息就是在源代码中定义的选择器,而目标(即接收信息的对象)则是能够执行该操作的对象(通常为视图控制器)。发送操作信息的对象通常为控制,例如按钮、滑块或开关,它能够触发事件对用户的交互操作(例如轻按、拖移或者值更改)作出响应。

委托

  委托模式不仅普遍用于既有的框架类,而且也可应用在应用程序的两个自定对象之间。常见的设计是将委托作为一种手段,允许子视图控制器将某些值(通常为用户输入的值)传达到父视图控制器。

处理Foundation

值对象

  Foundation 框架提供了为字符串、二进制数据、日期与时间、数字以及其他值产生值对象的类。

  值对象是指封装了基本值(属于 C 数据类型)且提供与该值相关的服务的对象。您会频繁遇到值对象,作为应用程序调用的方法和函数的参数和返回值。框架的不同部分,甚至不同的框架都可以通过传递值对象来交换数据。

  以下是 Foundation 框架中值对象的几个示例:
    NSString 和 NSMutableString
    NSData 和 NSMutableData
    NSDate
    NSNumber
    NSValue

编写自定类

接口

@interface XYZToDoItem : NSObject

@end

该示例声明了名为XYZToDoItem 的类,它继承自 NSObject

实现:

#import "XYZToDoItem.h"

@implementation XYZToDoItem
@end

如果您在类接口中声明了任何方法,那么需要在此文件中实现它们。

储存对象的数据的属性  

#import "XYZToDoItem.h"
/*
想要跟踪的标记是项目完成的日期属性,并且不想让其他类访问此信息,方法是将它放在实现文件(XYZToDoItem.m)顶部的类扩展中
*/
@interface XYZToDoItem ()
@property NSDate *completionDate;
@end

@implementation XYZToDoItem

@end

方法用来定义对象的行为

  通过名称引带一个参数的方法时,冒号作为方法名称的一部分,所以方法名称是markAsCompleted: 。

- (void)markAsCompleted:(BOOL)isComplete onDate:(NSDate *)date;

更新代办事项的completionDate

例如,假设您想要让待办事项的 completionDate 保持更新。当待办事项被标记为完成,就将 completionDate 设定为当前日期。当它被标记为未完成,就将 completionDate 设定为 nil,因为它尚未完成。由于更新待办事项的 completionDate 是自包含任务,所以最好的做法是为其编写专属方法。但是,应当确定其他对象不能调用此方法。否则,其他对象可以随时将待办事项的 completionDate 设定为任何内容。因此,请将此方法设为私有。

@implementation XYZToDoItem
- (void)markAsCompleted:(BOOL)isComplete {
    self.completed = isComlete;
    [self setCompletionDate];
 }
- (void)setCompletionDate {
    if (self.completed) {
        self.comletionDate = [NSDate date];
    } else {
        self.completionDate = nil;
    }
}
@end

  

iOS-马上着手开发iOS应用应用程序-第二部分构建应用程序的更多相关文章

  1. 马上着手开发ios应用程序

    https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introd ...

  2. 马上着手开发 iOS 应用程序

    https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introd ...

  3. 马上着手开发Mac应用程序

    你是否想要开发 Mac 应用程序却又不知道从哪里入手?本路线图提供了 Mac 应用程序开发的绝佳起点,即使你已经是一个 iOS 开发专家,本路线图对你依然适用.Apple让开发应用程序和提交应用程序到 ...

  4. iOS-马上着手开发iOS应用应用程序-第一部分介绍

    教程:基础 main 中的 main.m 函数会调用自动释放池 (autorelease pool) 中的 UIApplicationMain 函数. @autoreleasepool { retur ...

  5. 微信小程序——使用vue构建小程序【外传】

    文档 http://mpvue.com/mpvue/ 根据文档构建完成的页面如下 更多的,还要继续看下文档~

  6. 开发iOS应用程序需要的工具和编程技术

    似乎每个iOS应用开发学习者都是从这篇文章开始写博客的,我也不例外,也从这里写吧,内容雷同,但绝对是原创.因为一直相信,通过自己的理解写出来,是掌握技术一个很好的途径. Xcode苹果最为优秀的集成开 ...

  7. 在Visual Studio中使用MonoTouch开发iOS应用程序

    前段时间在工作机上装了Mac OS X,这主要是因为我最近需要开发iPhone应用程序.虽然Xcode,Objective C一定是开发iOS应用程序的主流,但是经过一番考虑,我还是决定尝试一下使用M ...

  8. iOS 9应用开发教程之定制应用程序图标以及真机测试

    iOS 9应用开发教程之定制应用程序图标以及真机测试 定制ios9应用程序图标 在图1.12中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以 ...

  9. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

随机推荐

  1. Canvas是什么

    Canvas 是通过 JavaScript 来绘制 2D 图形,是 HTML 5 中新增的元素. Canvas 有如下特点: 绘制的是位图,图像放大后会失真. 不支持事件处理器. 能够以 .png 或 ...

  2. Maven-常用命令

    mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码 mvn deploy 发布项目 mvn test-compile :编译测试代码 mvn te ...

  3. Mysql 5.7.12解压版的安装及配置系统编码

    这篇博文是由于上篇EF+MySql博文引发的,上篇博文中在Seed方法中插入中文数据到Mysql数据库中乱码,后来网上找了N种方法也没解决.重装了MySql并在安装过程中配置了系统编码,此篇记录一下. ...

  4. 【POJ 1269】判断两直线相交

    题 利用叉积解方程 #include <cstdio> #define MAX 1<<31 #define dd double int xmult(dd x1,dd y1,dd ...

  5. iOS的网络环境判断

    网络环境的判断有两种方式 1.Reachability 2.AFNetWorking中 AFNetworkReachabilityManager Reachability步骤 (1)导入Reachab ...

  6. 55.Android之AsyncTask介绍 (转)

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

  7. BZOJ 3173: [Tjoi2013]最长上升子序列

    3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1524  Solved: 797[Submit][St ...

  8. 操蛋的CTex

    我一向是不屑于在windows下用latex的,看起来不伦不类,是geek就不要用windows,图方便就用word而不是latex.但是台式机上的fedora无法上网,那就委屈一下在windows1 ...

  9. 【poj2741】 Colored Cubes

    http://poj.org/problem?id=2741 (题目链接) 题意 给出n个骰子,每一面都有一种颜色,问最少更改多少个面的颜色可以使所有骰子通过旋转后完全相同. solution 迷之d ...

  10. 降低磁盘IO使Oracle性能优化(转)

    文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...