您的位置:首页 > 其它

开发iPhone应用程序(一)

2010-12-01 16:24 120 查看
转载请注明出处: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: