手把手教你iPhone 3G手机软件开发

“iPhone 是一款革命性的、不可思议的产品,比市场上其它任何移动电话整整领先了五年,”苹果公司首席执行官史蒂夫·乔布斯如是说,“手指是我们与生俱来的终极定点设备,而iPhone利用它们创造了自鼠标 以来最具创新意义的用户界面。”

的确,iPhone已经推出,便在全球手机市场中引起了轰动。iPhone被称为手机中最美丽的姑娘,拥有无与伦比的高雅与品位。它创新性的大屏幕、多点触摸交互、以及重力感应等超炫的特性不仅让全球用户对手机有了全新定义 。更为广大程序 员提供了华丽和令人振奋的平台。

1、iPhone硬件特性

iPhone内置4种传感器:加速计、触摸传感器、光线感应器和接近性传感器iPhone上这么多硬件设备为其炫丽的功能 提供了强大的基础。利用加速器,iPhone能够检测出用户何时把它由纵向旋转为横向,是否在做甩、摇等动作;利用光线传感器,根据周围环境光线强度,户内或户外,自动 调节显示亮 度,提供最舒适的视觉效果;利用接近性传感器,可以检测出用户何时把iPhone提升至耳朵附近,并立即关闭显示屏,以节省电源和防止触碰,直至 iPhone被移开。

2、开发 环境介绍

1)、iPhone SDK开发库框架介绍

Cocoa Touch :是面向程序员 的编程接口,包括 UIKit 和 Foundation 两部分。UIKit 提供了进程、线程管理,事件、窗口 、视图管理。Foundation 提供基本的数据结构, Cocoa 提供的接口全部是Objective-C方式的接口。

Media:该层提供了更底层的图形、声音、视频方面接口。如OpenGL-ES、OpenAL、动画、QuartzCore,Video支持 H.264、mp4、3gp、quicktime等压缩编码。音频支持 AAC、ALAC、A-law、IMA/ADPCM (IMA4)、PCM。另外还支持PDF、HTML格式 图形显示。这层接口有些是用 Objective-C方式提供,有些是使用C语言 接口方式提供。

Core Services:此层提供的功能和Cocoa touch的Foundation 功能比较接近,不同的是Core Services 提供的接口是C语言 接口,并且更接近系统 底层,效率更高。

Core OS:提供接近操作系统层的接口,C语言接Memory、Threads、File System、sNetwork。

2)、开发工具 Xcode介绍

下载 安装完iPhone SDK,机器上便有一个Xcode应用 程序,XCode是一个IDE,功能强大。支持语法高亮、在线 帮助、工程管理、断点调试、单步跟踪等功能。并且XCode 和 其他工具如 iPhone 模拟器,内存检查工具Instruments, 性能分析工具Shark无缝结合的非常好。

3)、模拟器(iPhone Simulator)

iPhone 模拟器能模拟大多数场景,并且和XCode 集成的非常好,可以在Xcode中断点调试,查看内存泄露问题。但是和它和真机设备环境还是有一些区别:

Ø         不能模拟GPRS或EDGE无线上网方式;

Ø         不能模拟多点接触操作;

Ø         不能模拟OpenGL-ES;

Ø         模拟器的CPU和内存,网络都是用PC机的,相对比较充裕,真正设备上相对比较恶劣,所以在模拟器上跑得很流畅的应用,在真机设备上可能性能低下。

Ø         运行 库不完全一致,在模拟器上能运行的应用有可能运行不起来。可能某个函数 在模拟器上不支持。

3、如何开发自己的iPhone 应用

Ø         首先需要一个Mac OS X 10.5.4 or later 的操作系统。Mac可以在 Apple电脑和普通PC上安装。

Ø         一台iPhone或iTouch是不可缺少的,虽然SDK带有模拟器,但是模拟的环境和真实环境还是有很大差别的。

Ø         下载安装iPhone SDK (Xcode),SDK是免费的。

Ø         申请license,这个不是免费,有99美元和299美元两种license.

Ø         熟悉Objective-C 语言,iPhone 的界面库是使用Objective-C语言写的,熟悉Objective-C语法是必修之路。

Ø         写代码 ,编译,调试,发布。

4、iPhone 应用设计原则

iPhone全新的开发平台,在归类上它属于嵌入式开发,和许多其他嵌入式开发遵循相同的原则,同时,它又有自己的特色。

1)、One Application at a Time

在同一时刻只能有一个应用运行。 这条规则是Apple公司给开发人员的一个紧箍咒。实际上,iPhone OS 是一个支持多进程的系统。当你的iPhone开机后,至少有10个以上的 进程在后台运行。但是Apple给开发人员这个限制也是无奈的选择。原因是 iPhone物理内存虽然有116M,但是iPhone OS不支持虚拟内存,也就是说,无法像高级操作系统那样通过存储设备换取大内存。另外,iPhone 一开机,就有10多个系统应用在运行,这时候留给用户可以用的内存空间只有4-5M可以用。这么少的内存,加上iPhone应用都是图形应用,根本无法同时分给几个进程。

2)、One Window at a Time

在同一时刻只有一个窗口,iPhone是一个手持设备,遵循便捷的输入输出,不能像PC上应用那样,多窗口叠加拖放。基本上,iPhone每个界面都是全屏显示。

3)、Reducing Memory Use

这是开发人员在开发过程中时时刻刻要挂在心里的一条原则。正如第一条所述。iPhone系统中内存是极度缺乏。尽量少用长期占用内存,用完马上释放。

4)、Reducing Power Consumption

减少电源消耗。iPhone 耗电量大是iPhone几大缺点之一。网络,电话,影视频,3D这些调用都是导致耗电量大的原因,如果你的应用中有这些调用,那你就要考虑如果省着点用,如减少网络流量等方法。

5)、Fast Launch, Quickly Out

这个是要求用户软件 应当有良好的用户体验感,启动快,退出快。不能长时间对用户操作没有响应。

5、应用程序结构介绍

1)、应用程序生命周期和事件循环

应用程序从点击桌面快捷方式开始,就被系统加载到内存中,在所谓的沙箱环境运行,成为一个进程。经过一系列初始化开始在主循环中接收处理事件(定时器 、用户点击、网络事件、内存不够系统事件、电量不够系统事件)。当用户按Home按键,应用程序将退出,释放自己的资源。

2)、沙箱

Application Sandbox 是提供给应用程序一个限制的运行环境。对应用的许多操作做了授权限制。如文件 读写,应用程序只能访问 某些限定目录下的文件,还有网络和其他硬件设备的访问控制都做了限定。

应用程序的目录限定如下,MyApp.app目录下是只读,Documents有读写权限、Library只读、tmp可读写。

6、UIKit控件 介绍

iPhone的开发工具Xcode支持C语言和Objective-C语言,可以混合编译,开发人员可以像在其他平台一样使用C语言写自己的数据结构管理数据。但是如果要创建窗口和控件的话,就得用Objective-C 语法,因为UIKit 接口是Objective-C接口。

UIKit是iPhone开发的界面库,提供了丰富的界面元素:

UIWindow:一个应用程序有且只有一个window,window是个容器只能放一个UIView;

UIView:用来显示的区域,UIView是所有其他界面控件的父类。UIView可以作为一个容器,放多个子View;

UIButton:从UIView继承,响应用户点击事件;

UILable:从UIView继承,静态只读文本 标签;

UITextField: 从UIView继承,单行文本输入控件。

UITextView:多行文本输入

UIWebView:显示Html网页 控件。

UINavigationBar:导航条;

UITabBar:工具条;

UIAlertSheet/UIAlertView:模态对话框

UISwitchCtrl:相当与RadioBox,2选一。

UISegmentCtrl:多选一

UITableView:显示列表

UISlider:表示进度或百分比

UIProgressView:表示进度。 。

UIPickerView:有点例似于Combox功能,多选一

7、总结

iPhone OS 提供了非常强大的开发平台,有许多强大的系统调用让你能够写出炫丽的应用。从某种角度来看,iPhone OS已经不是一个嵌入式操作系统,它几乎有着桌面操作系统所有的功能。同时它又有诸多限制,内存不够,CPU 频率过低,无法后台运行。如何在有限的资源上充分利用这些系统特性,就是考验开发人员系统设计能力和编程功底了

转自: http://www.4ucode.com/Study/Topic/1689356

手把手教你iPhone 3G手机软件开发相关推荐

  1. 手把手教你iPhone 3G手机软件开发 转帖

    http://www.hgbbs.com/bbs/archiver/?tid-141535.html "iPhone是一款革命性的.不可思议的产品,比市场上其它任何移动电话整整领先了五年,& ...

  2. 手把手教你打造360手机Android应用商店高级开发实战视频教程

    百度网盘下载 课程目标 *如果你需要完成一个完整的商业化项目,苦于无人指导,本课程正是你的不二选择. * 改变= 时间+合理的学习,建议童鞋们不要把时间浪费在零碎化的无意义的课程里,要学就学真正系统化 ...

  3. 3G手机视频开发平台

    3G手机视频开发平台 "3G手机视频开发平台"是一套开放的技术平台,模块化结构设计,可以快速的为现有视频应用系统,包括视频监控系统.视频会议系统.视频娱乐平台等提供手机终端接入能力 ...

  4. Android手机软件开发的前景

    Android手机软件开发的前景 今天是3G 的年代,中国拥有超过7亿的手机用户,而全球更是将近50亿,这样一个庞大的用户市场.而随着运营商语音话费的下降,手机上的各类增值应用已经成为了这个行业各环节 ...

  5. 手机软件开发入门 [转]

    昨天在<程序员>上看到一篇访谈文章,孟岩就3G手机软件采访科泰世纪的陈榕.看了后,第一个感觉就是陈榕没做过手机软件.其实"不知为不知"也无所谓,但陈榕扯了一堆&quo ...

  6. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  7. 求职 个人简历 手机软件开发工程师

    个人信息 姓名:  王成           性别: 男                    出生日期:  1985.10 学历:  大专           专业:  计算机网络技术   工作年限 ...

  8. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  9. 北大青鸟:手机软件开发指引

    北大青鸟:手机软件开发指引 来源:[url]http://www.accp-teem.com.cn/ArticleView/2007-7-12/Article_View_1176.Htm[/url] ...

最新文章

  1. c语言删增,C语言中初始、增加和删除进程信号的操作方法简介
  2. hana::detail::variadic::at用法的测试程序
  3. C++利用SOCKET传送文件
  4. python 白盒测试_白盒测试教程 - 颜丽的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 阅读英文论文的方法总结(三遍法)
  6. SpringMVC之数据传递三Ajax与Controller交互
  7. Dubbo搭建管理控制台
  8. 在ubuntu13.04上安装Mac主题
  9. Linux学习笔记004----CentOS7 提升普通用户权限到Root权限
  10. SoapUI Pro Project Solution Collection-DataSource(jdbc,excel)
  11. 供应链管理优化和革新八大关键因素
  12. iOS 实现语音播报
  13. matlab 报错 索引超出数组元素的数目(1)。
  14. Android 扫码枪 读取(外接键盘读取)
  15. 稻盛和夫《干法》读后感
  16. 8583协议深入理解 1
  17. 一建网课一级建造师精讲班视频课件建筑市政机电法规管理经济
  18. 开发框架-.Net:Learun(力软敏捷开发)
  19. 什么时间吃nmn比较好,nmn服用产生效果和时间,请正确认识
  20. 斐波那契数列前20项及和

热门文章

  1. ICCV2019——SCRDet Towards More Robust Detection for Small, Cluttered and Rotated Objects
  2. shiro集成springboot的脚手架
  3. 干货!旋转预测能够告诉我们分类器准确度的哪些信息?
  4. CSDN自动展开全文的插件
  5. 2021年RHCE考试题解法
  6. 宜早不宜晚,使用思维导图训练孩子的逻辑思维!
  7. 全球最厉害最有钱的24位顶尖程序员及其代表项目(公号回复“顶尖程序员”下载PDF资料)
  8. 云原生小课堂|Envoy请求流程源码解析(三):请求解析
  9. win10升级nvidia、cuda、cudnn,非常简单
  10. 凯撒密码,可输入任意长度字符串进行转换