转载请注明出处: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

开发iPhone应用程序(一)相关推荐

  1. iPhone开发系列文章(四)-开发iPhone应用程序(一)

    本人翻译的Apple Dev Center的技术资料并稍作修改. 转载请注明出处:http://blog.csdn.net/zhyzh2046/ 从较高的层面看,开发iPhone应用的过程与开发Mac ...

  2. Adobe抛弃iPhone应用程序开发

    Adobe和苹果之间的恩怨纠纷似乎快有结果了.一切开 始于苹果公司改变iPhone开发人员计划许可协议- 那臭名昭著的第3.3.1条 - 禁止把Flash程序转换到iPhone上.这条规定使开发者针对 ...

  3. html5 iphone菜单栏,如何制作一个HTML5的iPhone应用程序

    在过去的一年里,你不是很容易踩踏,对于所有的使用Objective-C开发iPhone程序的开发者而言,日子都不那么好过,你不是为了学习开发iPhone应用程序曾经硬着头皮去读着那生涩难懂的学习教程, ...

  4. 一家很好的iPhone应用程序开发公司——易标科技

    上海etagmedia易标科技--iPhone应用程序开发公司 作为一个最高效.最专业的iPhone应用程序开发公司.上海etagmedia易标科技有优秀的iPhone应用程序开发团队.有在iPhon ...

  5. [.NET] 在Windows系统中搭建基于.NET的iPhone应用程序虚机开发环境

    看了这个标题,也许很多朋友认为我是标题党,很多人都没听说过.NET开发iPhone,今天就我就来证实了这一点,而且我已经亲身体会了这一点. 在正式开始教程之前,先陈述一下环境搭建的步骤及要点,本环境搭 ...

  6. 【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

    哈喽大家好,我是鹏哥. 今天想记录的学习主题是 -- 基于pythonista3 app开发自己的iphone应用程序. ~~~上课铃~~~ (由于今天被小伙伴推荐了这首歌,因此就应他的要求,作为此文 ...

  7. 软件创富密码:iPhone应用程序开发攻略之iPhone特色传感器应用(双色)

    软件创富密码:iPhone应用程序开发攻略之iPhone特色传感器应用(双色)  王志刚等 编著 ISBN978-7-121-14440-0   2011年9月出版 定价:69.00元 16开 288 ...

  8. [WP]使用ApacheCordova开发HTML5-WindowsPhone应用程序

    下载代码示例 这篇文章介绍 Apache 科尔多瓦,创建使用 HTML5 和 JavaScript,跨平台移动应用程序的框架,并显示了如何使用它为 Windows Phone 开发应用程序. Wind ...

  9. IOS开发系列--IOS程序开发概览

    IOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 9983 阅读, 51 评论, 收藏, 编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我 ...

最新文章

  1. C#之消息队列的简要说明
  2. Merge Two Sorted Lists
  3. 成功解决IndexError: arrays used as indices must be of integer (or boolean) type
  4. Java自带的多线程监控分析工具(VisualVM)
  5. python零基础学习教程之Python 运算符
  6. SpringMVC-Helloworld 的归纳理解
  7. 深度学习(Deep Learning):循环神经网络一(RNN)
  8. 【.NET】实现CI/CD(二)运行镜像,自动化部署
  9. SqlMap异常的处理
  10. Python 第五章 数据预处理
  11. 2014025675 《嵌入式系统程序设计》第七周学习总结
  12. phpdesigner怎么写php,phpdesigner
  13. ThinkPHP6 操作SharePoint
  14. Flink中水位线Watermark
  15. linux u盘 写保护,高手分享U盘被写保护的解决方案
  16. gogo learning
  17. 格斗系统 - Universe Fighting Engine
  18. Android集成LeanCloud用户反馈SDK要注意点
  19. Java 对接打印机接口
  20. 关于mplayer dvd seek定位函数dvd_seek_to_time

热门文章

  1. Win API使用记录--RtlCopyMemory与RtlMoveMemory区别
  2. PHP祛斑,激光祛斑后悔死了
  3. PySpark RDD 之 reduce
  4. MFC之学习位图操作
  5. 百变北京昌平龙脉温泉小鱼戏水2日自驾游(可延住)
  6. 理解前端的 Middleware 原理与实现
  7. mssql数据库提权中xp_cmdshell使用
  8. 火星人集成灶捷报频传闪耀集成灶行业 盘点火星人取得的耀眼成绩
  9. android状态栏白色,Android如何实现状态栏白底黑字效果
  10. Extjs各版本的下载链接,包含ext3.4源码示例