iPhone开发入门教程.docx
- 文档编号:3443132
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:18
- 大小:522.06KB
iPhone开发入门教程.docx
《iPhone开发入门教程.docx》由会员分享,可在线阅读,更多相关《iPhone开发入门教程.docx(18页珍藏版)》请在冰豆网上搜索。
iPhone开发入门教程
iPhone开发入门教程
(一)iPhone开发简介
开发一个iPhoneApplication的过程可以分为以下几个主要的步骤:
1.创建你的Project
2.设计用户界面
3.编写代码
4.构建和运行你的Application
5.调节你的Application的效能
1.创建一个iPhoneProject
Xcode提供了一些iPhone-applicationproject的模板让你可以很方便的开发你的应用。
你可以选择以下几种:
∙Navigation-BasedApplication类似于地址薄那样的分层数据,多屏幕界面的应用
∙OpenGLESApplication基于OpenGLES视图,能够提供图片和动画功能的应用
∙TabBarApplication类似于时钟,可以在各自页面提供可供用户选择设置界面的应用
∙View-BasedApplication用一个单独的试图做为用户界面的应用
∙UtilityApplication类似于Stocks,提供一个主页面和一个翻转的简单设置页面
∙Window-BasedApplication一个简单的框架,包含一个applicationdelegate和一个window,可以用来实现你自己的多层试图
如果你需要添加一个静态库到你的iPhoneapplication中去的话,你可以选择Project->NewTarget,然后选择StraticLibrary到iPhoneOS/CocoaTouchlist中。
在iPhone中使用StaticLibrariy不需要codesigned,因此,你需要做一下设置以在你创建的staticlibrarytargets中移除CodeSigningIdentity的设置。
∙打开staticlibrary的Info窗口,选择Build面板
∙找到CodeSigning分类中,在CodeSigningIdentity下选择AnyiPhoneOSDevice这一项
∙改变AnyiPhoneOSDevice的值为Don’tCodeSign
开发iPhoneapplication,你的大部分工作都在projectwindow中完成,下面的截图展示了一个projectwindow
2.编写代码
编写代码最主要的工具是Xode的texteditor,这个texteditor几个常用的特性功能如下:
∙头文件定位:
Command+双击一个常量、变量、对象或者函数名,就可以在新打开的窗口中跳到定义它们的位置
∙API参考定位:
Option+双击一个符号名,能够跳到APIreference中关于它的用法
∙代码折叠功能
∙代码自动完成
3.构建和运行你的Application
运行iPhoneApplication通过iPhoneSimulator来完成。
对于编译或者调试,Xcode依赖一些开源工具来完成,比如GCC和GDB。
Xcode同样支持使用版本控制的团队开发,比如Subversion,CVS等。
4.调节你的Application的性能
在Xcode下调试好你的Application后,你还需要确定你的Application能很好的运行在硬件设备上,比如内存资源在iPhone上是一个稀缺的资源,所以你的Application必须将内存的消耗减少到最小,又或者你的Application还得考虑到电池消耗等等问题,Xcode提供了两个工具来调节你的Application的性能,Instruments和Shark。
详情请看后面的“调节Application的性能“一节。
(二)第一个iPhone程序“HelloWorld”
指南:
Hello,World!
这个小节指引你创建一个简单的Project在iPhone的屏幕上显示文字。
创建项目:
1.运行Xcode
2.选择File>NewProject
3.选择Window-BasedApplication模板,选择Choose
4.输入项目名HelloWorld并选择保存位置
5.添加MyViewclass到project中
∙选择File>NewFile.
∙选择CocoaTouchClass下面的UIViewsubclass并单击Next
∙先Name输入框中输入”MyView.m”
∙选择“Alsocreate“MyView.h””选项并单击完成
6.选择合适的SDK激活
Project>SetActiveSDK下可以进行相应的设置
编写代码
在Xcode中,TextEditor将会占用你大部分的时间,你可以通过它编写,构建你的Application,调式你的代码。
让我们来看看Xcode是怎样帮助我们完成第一个任务的。
首先,修改”HelloWorldAppDelegate”class,让它能够使用MyView这个class
1.
1.在Groups&Files列表中,选择HelloWorld组
2.在Detail视图中,双击HelloWorldAppDelegate.m
3.在弹出的HelloWorldAppDelegate.m编辑器窗口中
▪添加导入MyView.h的代码
#import“MyView.h”
▪在applicationDidFinishLaunching:
中Overridepoint注释一行下面添加如下代码
MyView*view=[[MyViewalloc]initWithFrame:
[windowframe]];
[windowaddSubview:
view];
[viewrelease];
4.修改MyView.m中的drawRect:
方法来在view中输出文字.完成后的drawRect:
方法应该是这样的
-(void)drawRect:
(CGRect)rect{
//Drawingcode
NSString*hello=@”Helloo,World!
”;
CGPointlocation=CGPointMake(10,20);
UIFont*font=[UIFontsystemFontOfSize:
24];
[[UIColorwhiteColor]set];
[hellodrawAtPoint:
locationwithFont:
font];
}
运行你的程序
单击BuildandGo或者选择Build菜单下的BuildandRun运行你的程序,你会看到弹出一个iphone模拟器,选择屏幕上的helloworld,就会看到熟悉的“helloworld”。
运行你的Application
当你做好准备调试你的application,你首先是通过Xcode的Build来构建你的系统,如果Build没有错误的话,你有两种方式可以运行你的Application:
iPhoneSimulator和Device
iPhoneSDK包括了两个SDK系列:
iPhoneSimulatorSDK和iPhoneDeviceSDK。
iPhoneSimlulatorSDK:
通过此SDK来Build的application运行在iPhoneSimulator下。
iPhoneDeviceSDK:
通过次SDK来Build的application运行在Device下。
下面几个步骤是你运行你的Application需要做的:
1.设置application的目标iPhoneOS版本
2.设置ActiveSDK
3.设置使用的Build配置
4.Build你的application
5.运行你的application
下面的文字稍微详细点的描述了以上几个步骤。
∙设置application的目标iPhoneOS版本
每一个发布的iPhoneOS(包括与其相对应的iPhoneSDK)都包括了它以前的版本所不提供或支持的一些特性。
当一个新的iPhoneOS发布的时候,有的用户会直接升级到最新的版本,而另外的用户会在等待一段时间之后才会升级到最新的版本。
你可以根据你的application的需要和你的用户的情况选择下面两个策略中的一个:
∙以最新的iPhoneOS为目标发布。
意味着你可以使用最新的iPhoneOS版本的一些特性和优点,但也许这样做也很接近只能让很少一部分用户能在他们的设备上安装你的application,因为你的application并不能运行在他们那些没有升级到最新版本iPhoneOS的设备上。
∙以以前的iPhoneOS为目标发布。
这样做能让你所发布的application有一个比较大的用户基数,因为这样发布的application不光能运行在最新版本的OS的设备上,也能运行在以前稍早的OS版本的设备上,但是这样做的缺点在于你将不能使用最新版本的iPhoneOS所提供的一些最新的特性和优点。
你可以在你的project的info窗口中General一项中的BaseSDKforALLConfigurations这一栏弹出的菜单中设置的你默认的目标iPhoneOS版本。
你还可以在project的info窗口的Build一项中的Deployment的iPhoneOSDeploymentTarget一项中选择不同的设置来针对不同的Build配置(比如发布或者调试),这里的设置会覆盖基本的SDK设置。
当你Build你的application后,你的目标iPhoneOS版本会在Info.plist文件中的MinimimOSVersion的内容中反应出来。
当你的application发布到AppStore之后会根据MiniminOSVersion的属性来判断你的application是针对哪个版本的iPhoneOS发布的。
∙设置ActiveSDK
ActiveSDK的设置告诉Xcode下次你运行Build命令的时候用哪个SDK来Build你的application和选择是运行在iPhoneSimlulator还是Device上。
下面两个地方可以设置ActiveSDK:
∙Project菜单的SetActiveSDK子菜单中
∙在项目窗口中的工具栏上的Overview弹出菜单中
当你在iPhoneSimulator中调试好你的application之后,你还必须在一个基于iPhoneOS的Device上调节你的application,以取得在实际应用中较好的性能,但你必须成为官方认证的iPhoneDeveloperProgram成员,详细情况会在后面的文章中专门说明。
当你activeSDK的设置从iPhoneSimlulator改为iPhoneDeviceSDK时,你需要注意的是二者虽然都是基于MacOS的,但是一些framework会在不同的环境中存在差异,比如ApplicationServicesframework。
如果你的代码直接导入了iPhoneSimulatorSDK的头文件──在
你可能需要用判断语句来#import或者#include合适的头文件来应对不同环境。
∙设置使用的Build配置
当你开始一个build你的application的过程的时候,Xcode通过activebuildconfiguration来build你的application,你可以通过下面两个方法来设置你的activebuildconfiguration:
∙在Project菜单现面的SetActiveBuildConfiguration子菜单中
∙在在项目窗口中的工具栏上的Overview弹出菜单中
∙Build你的application
如果要开始Build你的application,选择Build菜单下的Build项。
状态栏会显示Build成功或者出现的错误及警告。
你可以在文本编辑器或者project窗口中浏览错误及警告的信息。
基于iPhoneOS的device支持ARM和Thumb两种指令集。
Xcode使用Thumb做为默认的指令集,因为使用Thumb相对于ARM能够显著的减少35%的代码量。
但如果你的application广泛的应用到了浮点运算的代码的话ARM也许能带来比Thumb更好的性能。
你可能遇到的一个比较常见的build错误是由于applicationID的冲突引起的错误。
冲突来自于你提供的profile(通过程序入口取得的)和你的application的CFBundleIdentifier属性定义的ID的不同。
为了避免这个错误,请确保你的profile中的applicationID(AppID)设置成com.
∙运行你的application
当你运行你的application时,Xcode会把它安装到iPhoneSimulator或者device(由acitveSDK决定)并运行它。
如果你有多个device连接到你的计算机上,你可以指定谁来安装并运行这个application,通过Project>SetActiveExecutable菜单来设置。
运行你的application,选择Run>Run或者Run>Debug。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
首先从官网上下载源码包,解压后结构如下:
.
│ Background.png
│ Default.png
│ HelloWorld.xib
│ HelloWorld_Prefix.pch
│ Icon.png
│ Info.plist
│ main.m
│ MainWindow.xib
│ ReadMe.txt
│
├─Classes
│ HelloWorldAppDelegate.h
│ HelloWorldAppDelegate.m
│ MyViewController.h
│ MyViewController.m
│
└─HelloWorld.xcodeproj
project.pbxproj
猛一看,真是非常的复杂,慢慢来,下面我来解释一下。
首先看最外层,包含了2个目录和一堆闲散文件。
Classes目录顾名思义,存放了项目的各个类,是需要开发者进行改动的。
这里相当于symbian工程的inc和src目录。
HelloWorld.xcodeproj:
看上去是个目录,其实在mac上,这个是XCode的项目文件,存放了在XCode中,项目的组成和build等信息。
如果在XCode中打开这个工程,还会再生成2个文件,一般来说我们不用理会。
闲散文件:
1,几个png:
用于程序的背景和图标等。
2,pch:
预编译头文件,win32里经常会碰到,这里也有,包含了常用的头文件。
3,plist:
包含了项目自身的特性,比如说项目名称啊,默认加载的nibfile啊等等等等。
相当于symbian中的mmp文件。
4,两个xib:
这就是传说中的资源文件。
和现在流行的GUI程序一样,iphone中也提供资源文件,用于简化编码过程,提高开发效率。
5,main.m:
为什么这里单放了一个源文件呢,其实这个main.m是完全不用动的,大家马上就会看到这里面到底有什么。
---
开始进入source:
首先就是iphone程序的入口,在main.m中。
intmain(intargc,char*argv[])
{
NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];
intretVal=UIApplicationMain(argc,argv,nil,nil);
[poolrelease];
returnretVal;
}
这是大家都熟悉的main函数,里面马上创建一个NSAutoreleasePool对象,用于iphone高级架构的内存管理,然后全权委托UIApplicationMain这个函数来处理整个过程。
UIApplicationMain中封装了具体的做法,在适当的时候,会调用适当的方法,形成一个事件驱动的过程。
和UIApplicationMain最为紧密的,就是UIApplicationDelegate,UIApplicationDelegate提供了对app生命周期关键时刻的处理。
在这里,极为简单地,在iphoneOS准备好运行这个app后,会发送消息给UIApplicationDelegate的applicationDidFinishLaunching方法,表示程序开始run,我们的具体实现当然是初始化一切啦。
上代码:
-(void)applicationDidFinishLaunching:
(UIApplication*)application{
//Setuptheviewcontroller
MyViewController*aViewController=[[MyViewControlleralloc]initWithNibName:
@"HelloWorld"bundle:
[NSBundlemainBundle]];
self.myViewController=aViewController;
[aViewControllerrelease];
[[UIApplicationsharedApplication]setStatusBarStyle:
UIStatusBarStyleBlackOpaque];
//Addtheviewcontroller'sviewasasubviewofthewindow
UIView*controllersView=[myViewControllerview];
[windowaddSubview:
controllersView];
[windowmakeKeyAndVisible];
}
一开始,我们建立起viewcontroller,这里是读取一个名叫@"HelloWorld",并且处于mainBundle中的nibfile。
之后设置一下状态栏(可有可无的),接下来,给window加一个UIView,这个UIView在controller中可以取到。
最后让这个window"makeKeyAndVisible",显示窗口,并接受用户的输入。
最关键的已经说完,接下来一起看看viewcontroller的细节,由于是helloworld,我就不把功能当成重点了,大家有可以去查查sdk。
先看看controller的声明的一部分,注意这只是一部分:
@interfaceMyViewController:
UIViewController
IBOutletUITextField*textField;
IBOutletUILabel*label;
NSString*string;
}
这里我们的controller继承自iphone规定的controller的基类——UIViewController,并实现了UITextFieldDelegate这个Delegate(相当于c++的纯虚函数;java中的接口)。
UITextFieldDelegate只是用来实现输入框的增强型功能的,可有可无。
下面有3个成员变量,textField是系统输入框控件,label是系统label控件,string是文字。
注意前两个成员的声明之前,出现了IBOutlet,这是用来通知interfacebuilder的,用于把代码中的实例和nibfile中的定义关联起来。
在MyViewController.m中,override了几个来自于基类的方法,有viewDidLoad和touchesBegan。
viewDidLoad来自于UIViewController,是一个回调。
touchesBegan来自于UIResponder,当触摸开始时(手指头向下按的时刻),由系统回调回来。
ok,代码部分已经全部说完,因为是helloworld,回调并不太多也并不太全,稍稍有些不严谨,不过这不影响我们学习。
---
其他的一些重要文件:
1,HelloWorld.xib:
可以直接打开,这是个xml。
数据量虽然不小,但我们根本不需要直接改。
interfacebuilder就是用来修改这个文件的。
文件内记录了位置、引用、字符串等等信息。
2,Info.plist:
这也是个xml,记录了app的重要特性。
这里基本就要自己手动改了,在plist节点中,仅有一个dict子节点。
dict节点中定义了若干个key,随便说几个:
CFBundleDevelopmentRegion(开发者所在地区),CFBundleDisplayName,CFBundleExecutable,NSMainNibFile等。
但说一下NSMainNibFile,它定义了入口的nibfile,这个工程定义的是MainWindow.xib,提供了window。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
从头教你不用IB写漂亮的程序
图片:
图片:
图片:
图片:
图片:
图片:
图片:
没有nib的iphone程序
InterfaceBuilder开始用还觉得酷炫浮华,越用越觉得不对劲,对于刚开始学写iphone程序,没有帮助理解代码,反而隐藏了需要知道的内容,然后用线连啊连,连着连着就晕了。
另外,重点是,牛人都直接用代码写GUI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iPhone 开发 入门教程