开发iPhone应用程序(一)

转载请注明出处:http://blog.csdn.net/zhyzh2046/

从较高的层面看,开发iPhone应用的过程与开发Mac OS X应用相似。都使用相同的工具和很多相同的基本类库。撇开相似性,他们之间还是有很大不同的。iPhone不是桌面计算机;它有不同的用途并且需要非常不同的设计方法。这种方法要利用iPhone OS的优势和领先的特色,它们可能在移动领域不相关或不切实际的。iPhone和iPod touch设备上更小尺寸的屏幕,也意味着应用的用户界面必须有序组织并且要一直关注在用户最需要的信息上。

图 1 MoveMe应用程序窗口

 

iPhone OS允许的用户与Phone和iPod touch设备的交互方式是在桌面应用中无法使用的。多触点接口是革命性的方式,他可以报告接触在屏幕上的每个分开的手指信息,并使处理多手指动作和其它复杂输入变得简单。另外,内置的硬件特征,比如加速器,尽管在一些桌面系统中也出现过,被更加广泛地应用在iPhone OS中,用来跟踪当前的位置并响应调整内容。理解如何在应用程序中使用这些功能将会帮助你设计出用户所需要的应用程序。

理解iPhone应用的设计的最好方法就是理解示例代码。这篇文章会带你查看MoveMe示例程序的代码。这个示例演示了iPhone应用的典型功能,包括: 初始化应用程序

显示窗口

绘制定制内容

处理触摸事件

显示动画

图1显示了应用程序的界面。触摸Welcome按钮会使这个按钮开始移动并将自己居中在你的手指之下。将手指在屏幕中移动,按钮也会跟着你的手指。手指离开屏幕时,会使用另外动画,按钮会跳回到原来的位置。双击按钮周围的区域会改变按钮上问候语的语言。

在学习这篇文章的其它章节之前,你应该下载这个示例(MoveMe),这样你可以直接学习代码。同时你应该阅读以下iPhone Dev Center中的导引文章,来基本理解iPhone OS和将使用的工具和开发语言。

如果到现在还不熟悉Objective-C编程语言,你应该阅读Learning Objective-C: A Primer来熟悉Objectvie-C的基本语法。

分析MoveMe示例项目

下载的MoveMe示例提供了源代码和编译、运行应用程序所需的支持文件。使用Xcode(默认位置是/Developer/Applications)工具可以管理iPhone OS的项目。每个Xcode项目窗口集成了用来管理代码和资源文件的工作空间,编译代码和集成应用程序的规则,和编辑和调试代码的工具。

图2展示了MoveMe项目在Xcode中的项目窗口。将这个项目拷贝到本地硬盘并双击MoveMe.xcodeproj文件就可以打开这个项目。(还可以在Xcode中通过选择File > Open并选择这个文件来打开项目。)这个项目包含Objective-C源文件(.m后缀名),图片文件和其它资源,和一个为构建应用程序包预先定义的目标(MoveMe)。

图2 MoveMe 项目的窗口

 

在iPhone OS中,Xcode项目生成的最后结果是一个程序包,这个一种特殊的包含程序的可执行文件和支持资源文件的目录。iPhone OS的程序包具有相对平整的结构,所有文件均存储在程序包目录的最高层中。但是,程序包可能也会包含子目录,这些子目录会存储本地化的字符串或者和语言相关的资源文件。学习这篇文章并不需要详细了解程序包的结构,但是如果感兴趣可以阅读iPhone OS编程指南中的程序包一节获取更多的知识。

 打包MoveMe程序

当程序编译完成,Xcode将加载它到iPhone模拟器中并运行。使用鼠标可以点击Welcome按钮并可以在屏幕中拖拽按钮,可以看到程序运行的结果。如果你一个用于开发的设备,也可以编译程序并在设备中运行它。可以参照iPhone OS编程指南中的开发环境一节,学习如何配置用于开发的设备和如何装载程序。

内存管理简介

iPhone OS从根本上说是一个面向对象系统,所以分配的大部分内存是以Objective-C对象的形式存在的。iPhone OS中的对象使用计算引用的方法来判断何时能安全释放对象占据的内存。当第一次创建对象时,它的引用计数从一开始。收到那个对象的客户端程序可以选择保留这个计数,因此,引用计数加1。如果程序存储一个对象,这个程序必须在这个对象不再使用时释放它。 释放对象使引用计数减1,当一个对象的引用计数等于0,系统会自动收回对象的内存。

注意:iPhone OS并不支持使用垃圾收集特征进行内存管理,在Mac OS X v10.5或更新的版本中可以使用这些特征。

如果想分配普通的内存块,这种内存块不和某个对象相联系,可以使用标准的malloc调用库。这种情况下,任何使用malloc分配的内存,都要使用free函数来释放使用完毕的内存。系统不会自动释放由malloc分配的内存块。

不管怎样分配内存,在iPhone OS中管理所有内存的使用比在Mac OS X中更重要。尽管iPhone OS具有虚拟内存系统,但是它并不使用交换文件。这意味着,根据需求可以覆盖代码页但同时要将程序的数据填入内存。系统会监测所有空闲内存,并会分配程序所需的内存。如果内存使用非常紧急时,系统有可能会结束你的程序。但是,这种做法只是作为最后的方法来使用,这样可以保证系统有足够的内存来执行紧急操作,比如说接电话。

如果想了解更多有关iPhone OS怎样分配对象的信息,可以参考Cocoa 基础指南。想了解更多提高程序的内存使用的信息和技巧,请参考iPhone OS编程指南中的内存使用管理。

初始化MoveMe应用

和每个基于C语言的程序一样,iPhone应用程序的入口点同样是main函数。当使用Xcode中iPhone模板创建一个新的项目时,是不需要自己写这个函数的。项目模板包含了这个函数的一个版本和开始程序所需的所有代码。

列表1中显示了MoveMe应用程序的main函数。Main函数在项目中的main.m文件中。用户创建的每个程序都会有main函数,而且通这个几乎相同。这个函数执行了两个主要的任务。第一,它创建了程序最高层的autorelease池,它的作用是回收使用自己的autorelease方法释放的Objective-C对象的内存。第二,它会调用UIApplicationMain函数创建MoveMe应用程序的主要对象,初始化这些对象并启动事件处理循环。应用程序直到这个循环退出才会返回。

Listing 1 使用main函数

int main(int argc, char *argv[]) {     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];     int retVal = UIApplicationMain(argc, argv, nil, @"MoveMeAppDelegate");     [pool release];     return retVal; }
在你的定制的项目中,main函数中唯一应该注意的部分就是应用程序代理对象的名称。这个名字与项目中提供的类名是相符的。这个应用程序代理对象同标准的UIApplication对象一起工作,对程序的变化的状态进行响应。应用程序对象负责沉重的任务,代理负责许多关键的工作,如下:

 创建程序的窗口和初始化用户界面  执行任何定制数据引擎所需的附加初始化工作  打开程序定制的URL scheme的内容  响应设备的方向变化  处理底层内存警告  处理退出程序的系统请求

启动时,大部分代理对象的直接联系会建立程序窗口并展示给用户,这部分将在创建程序窗口中描述。代理应该为程序的直接使用做所有需要的准备工作,比如恢复程序到之前的状态或创建需要的对象。当程序退出时,代理对象执行顺序的关闭并储存下次启动是所需的状态信息。

想了解更多有关基础架构和iPhone应用的生命周期的知识,请参考iPhone OS编程指南中的程序的核心架构。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhyzh2046/archive/2008/04/16/2298751.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
苹果官方文档 目录 介绍 3 谁应该阅读本文? 3 先决条件 4 本文的组织 4 提供反馈 4 相关信息 5 核心应用程序 6 核心应用程序架构 6 应用程序的生命周期 6 事件处理周期 9 基本设计模式 11 应用程序运行环境 12 启动过程快,使用时间短 12 应用程序沙箱 13 虚拟内存系统 13 自动休眠定时器 14 应用程序的程序包 14 信息属性列表 16 应用程序图标和启动图像 21 Nib文件 21 处理关键的应用程序任务 22 初始化和终止 22 响应中断 23 观察低内存警告 25 定制应用程序的行为 25 以景观模式启动 25 和其它应用程序进行通讯 26 实现定制的URL模式 27 显示应用程序的偏好设置 31 关闭屏幕锁定 31 国际化您的应用程序 32 性能和响应速度的调优 34 不要阻塞主线程 34 有效地使用内存 34 浮点数学运算的考虑 36 减少电力消耗 36 代码的优化 38 窗口和视图 39 什么是窗口和视图? 39 UIWindow的作用 39 UIView是作用 40 UIKit的视图类 41 视图控制器的作用 43 视图架构和几何属性 43 视图交互模型 44 视图渲染架构 46 视图坐标系统 48 边框、边界、和中心的关系 49 坐标系统变换 51 内容模式与比例缩放 52 自动尺寸调整行为 54 创建和管理视图层次 55 创建一个视图对象 57 添加和移除子视图 57 视图层次中的坐标转换 60 标识视图 61 在运行时修改视图 61 实现视图动画 61 响应布局的变化 63 重画视图的内容 64 隐藏视图 65 创建一个定制视图 65 初始化您的定制视图 65 描画您的视图内容 66 响应事件 67 视图对象的清理 68 触摸事件 69 事件和触摸 69 事件的传递 71 处理多点触摸事件 73 运动事件 80 拷贝、剪切、和粘贴操作 81 UIKit中支持拷贝-粘贴操作的设施 82 粘贴板的概念 82 选择和菜单管理 85 拷贝和剪切选定的内容 87 粘贴选定内容 89 消除编辑菜单 90 图形和描画 91 UIKit的图形系统 91 视图描画周期 91 坐标和坐标变换 92 图形上下文 93 点和像素的不同 93 颜色和颜色空间 94 支持的图像格式 94 描画贴士 95 确定何时使用定制的描画代码 95 提高描画的性能 95 保持图像的质量 96 用Quartz和UIKit进行描画 96 配置图形上下文 97 创建和描画图像 99 创建和描画路径 100 创建样式、渐变、和阴影 101 用OpenGL ES进行描画 101 应用Core Animation的效果 101 关于层 102 关于动画 102 文本和Web 103 关于文本和Web的支持 103 文本视图 103 Web视图 104 键盘和输入法 106 管理键盘 107 接收键盘通告 107 显示键盘 109 取消键盘 109 移动键盘下面的内容 109 描画文本 113 在Web视图中显示内容 113 文件和网络 114 文件和数据管理 114 常用目录 114 备份和恢复 115 在应用程序更新过程中被保存的文件 116 Keychain数据 116 获取应用程序目录的路径 117 文件数据的读写 118 文件访问的指导原则 123 保存状态信息 123 大小写敏感性 124 网络 124 有效进行网络通讯的贴士 124 使用Wi-Fi 125 飞行模式警告 125 多媒体支持 127 在iPhone OS上使用声音 127 基础:硬件编解码器、音频格式、和音频会话 128 播放音频 131 录制音频 141 解析音频流 144 iPhone OS系统上的音频单元支持 145 iPhone音频的最佳实践 145 在iPhone OS使用视频 147 录制视频 147 播放视频文件 147 设备支持 150 确定硬件支持是否存在 150 和配件进行通讯 151 配件的基础 151 声明应用程序支持的协议 152 在运行时连接配件 152 监控与配件有关的事件 154 访问加速计事件 155 选择恰当的更新频率 156 从加速计数据中分离重力成分 157 从加速计数据中分离实时运动成分 157 取得当前设备的方向 158 使用位置和方向服务 159 取得用户的当前位置 159 获取与方向有关的事件 161 显示地图和注解 163 在用户界面中加入地图视图 163 显示注解 165 通过反向地理编码器获取地标信息 173 用照相机照相 174 从照片库中选取照片 176 使用邮件编辑界面 177 应用程序偏好设置 180 偏好设置的指导原则 180 偏好设置的接口 180 Settings程序包 182 S

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值