您的位置:首页 > 其它

iPhone 5 创建应用程序

2011-08-26 21:38 344 查看
如何创建应用程序
当内部在编译你的应用程序时,你的应用程序会包含一系列不同的文件,它会包含已经编译的代码文件,也就是可执行文件,可能包含框架,在你的应用程序包内部,包含了运行你的应用程序所需的所有文件,还会有nib文件,nib文件时为你的应用程序预先铺设好的UI元素以及对象关系的细节。每个应用程序都会有个叫做info.plist的文件,本质上来说它是个描述了应用程序的一些节能功能或者配置参数的XML文件.

应用程序的运行
当有人在主屏幕上按下你的应用程序图标,它会开始这个应用,并在幕后做初始化。在某一时间点,你会被一个信息告知,你的应用程序已经初始化,然后你就可以做你要做的事情,它会为你装载主nib文件,如果你的主nib文件包含了视图,它会一起打开,然后它开始等待事件,以及运行循环,它基本上在等待任意类型的输入,可能那个输入时网络活动,基本上是所有这些事件,这个应用程序在等待一个输入,然后你处理了这个输入,它会继续等待一个输入,直到你的应用程序崩溃,但这个不可能的,或者有人按下了home按键,你的应用程序会被终止,你会被带会主屏幕。

UIKit框架
UIKit框架提供几种标准的界面元素,比如按键,滚动条,文本框等。标签是为了来渲染文本,表格视图是用来渲染一系列文本。事实上,你的应用程序是来自于UIKit,它叫UIApplication类。UIApplication是一个单体设计模式,意思是当运行你的应用程序时只有一个UIApplication实例,你可以一直从你的应用程序的任何地方获得这个实例。如果你需要去到你的应用程序实例中去,你可以一直用下面的叫做sharedApplication的类方法。如果你做[UIApplicationsharedApplication],你就可以得到代表你的应用程序的对象,并且你可以向它查询一些事情。
@interfaceUIApplication
+(UIApplication*)sharedApplication
@end
UIKit框架为你协调生命周期,管理时间循环以及分配时间给你的window和views,它还管理状态栏(iphone顶部,告诉你时间和网络状态,实际上你可以改变状态栏的外观,甚至你可以空值状态栏中的物件,你通过进入UIApplication对象来完成),管理应用程序的图标。UIApplication几乎没有子类化,一般用被勇为委托。委托是你保持UIApplication或者其他对象完整的一种方法,你不会改变它,不会重载它,但是它仍然获得部分对你应用程序执行时很重要的通告和信息。

委托
委托允许一个对象或类拥有被控制的行为和提供挂钩给别人做定制。委托必须避免子类化很复杂的对象,比如UITextField,UIApplication本身,UITableView,这些是你不想弄乱的对象和类,但是如果想要把它们用在,比如定制它们,我们把稳妥用做挂钩的方式。

UIApplicationDelegate
当你创建一个项目时,它(系统)会自动为你创建一个UIApplication的委托,它会分配在你的nib文件中,你自动地设置从你的应用程序接收信息。
下面是从应用程序获得信息的例子
-(void)applicationDidFinishLaunching:(UIApplication*) application ;
//启动结束后函数,你可以做一些必要的初始化,比如你想放置一个自己的window
-(void)applicationWillTerminate:(UIApplication*) application ;
//应用程序即将终结的函数,比如用户按下home键会触发该函数,你可以做一些后期处理,如保存你的数据库,关闭你的网络连接。
-(void)applicationWillResignActive:(UIApplication*) application ;
//如果有人打电话进来,你的应用不会退出,它只会resignactive,意思就是在用户打电话时退到后台,可以认为是失去激活状态
-(BOOL)application:(UIApplication*) application handleOpenURL:(NSURL *)url;
//在UIKit中,你的应用程序可以注册一个模式,比如http模式,每当你点击以http开头的东西,Safari就会被打开,你可以有定制的模式,其他应用程序可以用来打开你的应用程序。
-(void)applicationDidReceiveMemoryWarning:(UIApplication*) application ;
//接受内存警告,现在内存为128M,系统内存不足时会触发该事件,在这个函数中,你可以释放不需要的内存,这是作为预防措施的,如果你不响应这个内存警告,你的系统将会内存不足,系统会将你的程序关闭。

Info.plist文件
属性文件(通常是XML),描述了你的应用程序
图标的外观
状态栏的风格(默认,黑色,隐藏)
方向设置
使用Wifi网络
系统需求
所有上面的这些属性都能在xcode里面设置,当你在xcode里用新项目来创建应用程序时,系统会自动为你创建info.plist文件。在info.plist文件中,你还有添加一些你需要的键值对。

Model,View,Controller
MVC基本上,它对于你的应用程序有三种不同的职责,View是你展示给用户的,Model,是在你的应用重数据的存储,或者数据的表示。Controller管理并把数据展示给视图,同样地,当视图想要操作数据,它会是视图能这样做的管道。Model和View之间永远不会互相通信。控制器是管理,演示和控制的媒介。

Model
Model是应用数据和应用程序的状态,它可能是一个数据库,可能是你发动时创建的内存,或你从网络上取得的东西,但是它本质上时应用程序的数据。它并不知道数据会如何展示,也不知道它会被如何展示,它经常会存留在某个地方,如果它是一个数据库,你会把它存在在核心数据或SQL中,它可能存留在网络中。相同的模型应该可以在不同的界面中重复改变,并且不会做任何改变。

View
View,它代表中对你所使用的界面相称的用户模型,如果你使用IPhone,它会有对这个设备相称的视图元素,比如接受触摸操作和标准的界面元素,但是视图会让你操纵数据。

Controller
Controller基本是告诉视图关于数据的改变,以及在视图需要时改变数据,大部分你的应用逻辑都会在控制器中,

Model<--->Controller<--->View
模型与控制器对话,控制器能操纵模型。视图能操纵控制器,控制器能设置视图的状态。但是在视图和模型之间是没有交流的,它们互相并不对话。

在下面这个例子中,我们有控制器在中间,两边分别是两个部件,一个我们的模型,一个是我们的视图,控制器有能与模型对话的出口,它还有能和window对话的IBOutlet,这个window可能有按键或者滑动条,他们能发送行为,本质上来说,行为是从window到达控制器,因此控制器可以对行为做需要做的。



InterfaceBuilder和Nibs
有一个叫xib的文件后缀,它是个草稿,是你的应用程序视图的蓝图,Nib文件帮助你设置MVC中的V,它能帮助你规划界面,它们会告诉你如何把不同的元素正确地排列。它们还让你添加控制器对象,当你装载你一个Nib,它实际会实例化你的控制器对象,它还会让你连接控制器和UI,如果你的控制器有数个不同的IBOutlet,它会让你连接这些IBOutlet到正确的window或者视图,同时它还有IBAction,这允许你连接视图到控制器。

装载Nib文件
当你在保存你的Nib文件的时候,它实际上是创建这个对象,然后它把这对象深层地冷藏起来,当你装载你应用,Nib也会因为你装载视图或者主窗口而被装载,它把这些深层冷藏的对象取出来,并确保连接的正确性,然后你就有了一套可用的连接和视图,然后确保所有的出口和行为都是连接的,这会保证从Nib出来的正确实例是没有错误的。但从这个Nib解压的顺序是未定义的,这就带出来一个问题,如果你需要对从Nib装载进来的东西做一些另外的调整,那该如何做?在这里,我们可以使用一个awakeFromNib方法。awakeFromNib方法是一个默认的实现,它不对NSObject做任何事情,但是任何时候你的Nib从冷藏状态出来,任何时候Nib被装载,它都会调用awakeFromNib方法来告诉你Nib中的所有东西都已经装载。现在做任何初始化都是安全的。(awakeFromNib方法是在你的.m文件中实现的,有时候在文件中会自动生成,但是有时候是自己敲进去的,不需要在.h中定义,因为它是默认实现的)
-(void)awakeFromNib
{
//初始化
}

target-action
控制器允许你在某些行为被执行时,指定一个信息以及这个信息的接受者。你可以响应不同类型的行为和事件。
Controls– Events
不同的触摸事件(如下)
touchDown(有人第一次把手按到屏幕上会触发该事件)
touchDragged(将手指放在屏幕上拖动时触发的事件)
touchUp(用户抬起手指会触发该事件)
值改变事件(valuechanged,如滑动条,开关,segmented控制,进度条等)
编辑事件
editingbegin(编辑开始)
editingchanged()
editingended(编辑结束)

Controls– Target/Action
当事件发生时,你的应用程序被调用
ActionMethod
当你实现你的行为方法,可以有三种不同的方式来实现它(如下)。
-(void)actionMethod;(没有参数选择器)
-(void)actionMethod:(id)sender;(如果你按的是button,那么这里的sender就是button)
-(void)actionMethod:(id)senderwithEvent:(UIEvent *)event;(这里的事件包含了事件发生的位置,视图和时间类似的信息,事件的类型等)
多个Target-Actions
在UIKit中,你可以设置多个方法为一个事件。同样地,你可以在多个不同类型的设置有方法的事件。这些既可以在代码中实现,也可以在IB中实现。下面是对UIControl的定义,任何UIControl的子类都可以使用下面的方法。
@interfaceUIControl
-(void)addTarget:(id)targetaction:(SEL)actionforControlEvents:
(这里的target一般为self)
(UIControlEvents)controlEvents;
-(void)removeTarget:(id)targetaction:(SEL)actionforControlEvents:
(UIControlEvents)controlEvents;(一般为单击事件touchUpInside)
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: