怎样下载做网站的软件,用什么软件做动漫视频网站好,大学生网页设计作业 案例,wordpress调用页面标题ios应用的生命周期在开发过程中我们需要一些全局对象来将程序的各个部分连接起来#xff0c;这些全局对象中最重要的就是UIApplication对象。但在实际编程中我们并不直接和UIApplication对象打交道#xff0c;而是和其代理打交道。UIApplication 是iPhone应用程序的开始并且负… ios应用的生命周期 在开发过程中我们需要一些全局对象来将程序的各个部分连接起来这些全局对象中最重要的就是UIApplication对象。但在实际编程中我们并不直接和UIApplication对象打交道而是和其代理打交道。 UIApplication 是iPhone应用程序的开始并且负责初始化并显示UIWindow并负责加载应用程序的第一个UIView到UIWindow窗体中。 UIApplication的另一个任务是帮助管理应用程序的生命周期而UIApplication通过一个名字为 UIApplicationDelegate的代理类来履行这个任务。尽管UIApplication会负责接收事件而 UIApplicationDelegate则决定应用程序如何去响应这些事件UIApplicationDelegate可以处理的事件包括应用程序 的生命周期事件比如程序启动和关闭、系统事件比如来电、记事项警告本文会介绍如何加载应用程序的UIView到UIWindow以及如何利用 UIApplicationDelegate处理系统事件。 通常对于UIApplication读者是没必要修改它的只需要知道UIApplication接收系统事件即可而如何编写代码来处理这些系统事件则是 程序员的工作。处理系统事件需要编写一个继承自UIApplicationDelegate接口的类而UIApplicationDelegate接口 提供生命周期函数来处理应用程序以及应用程序的系统事件。 如果利用Xcode的模板创建项目Xcode会为程序员创建继承自UIApplicationDelegate的类但不会自动实现继承自 UIApplicationDelegate的可选的事件处理函数。如果读者创建一个名为“TestUIApplication”的项目Xcode会自 动创建TestUIApplicationAppDelegate.h和TestUIApplicationAppDelegate.m文件文件的声明 如下interface TestUIApplicationAppDelegate : NSObject UIApplicationDelegate而应用程序的UIApplication则被定义在MainWindow.xib文件中并且有一个作为outlet的UIApplicationDelegate引用。 iPhone 并不是多任务的操作系统所以应用程序很容易受到打扰比如一个来电可能导致应用程序失去焦点如果这个时候接听了电话那么应用程序会自动终止运行。还 有很多其它类似的事件会导致iPhone应用程序失去焦点在应用程序失去焦点前会调用委托类的 applicationWillResignActive()方法而应用程序再次获取到焦点的时候会调用 applicationDidBecomeActive()方法。比如在运行应用程序的时候锁屏会调用委托类的 applicationWillResignActive()方法而当屏幕被解锁的时候又会调用 applicationDidBecomeActive()方法。 另 外一个非常重要的方法就是applicationDidReceiveMemoryWarning()因为iPhone设备只有有限的内存如果为应用 程序分配了太多内存操作系统会终止应用程序的运行但在终止之前操作系统会通过先调用委托类的 applicationDidReceiveMemoryWarning()方法警告应用程序在UIApplication接收到这个事件后它会传递给 委托类的applicationDidReceiveMemoryWarning()方法委托类在这个方法内可以进行释放内存的操作以防止操作系统强制 终止应用程序的运行。现在来看协议中定义的这些需要实现的方法分别是什么作用1、- (void)applicationWillResignActive:(UIApplication *)application说明当应用程序将要入非活动状态执行在此期间应用程序不接收消息或事件比如来电话了2、- (void)applicationDidBecomeActive:(UIApplication *)application说明当应用程序入活动状态执行这个刚好跟上面那个方法相反3、- (void)applicationDidEnterBackground:(UIApplication *)application说明当程序被推送到后台的时候调用。所以要设置后台继续运行则在这个函数里面设置即可4、- (void)applicationWillEnterForeground:(UIApplication *)application说明当程序从后台将要重新回到前台时候调用这个刚好跟上面的那个方法相反。5、- (void)applicationWillTerminate:(UIApplication *)application说明当程序将要退出是被调用通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application说明iPhone设备只有有限的内存如果为应用程序分配了太多内存操作系统会终止应用程序的运行在终止前会执行这个方法通常可以在这里进行内存清理工作防止程序被终止7、- (void)applicationSignificantTimeChange:(UIApplication*)application说明当系统时间发生改变时执行8、- (void)applicationDidFinishLaunching:(UIApplication*)application说明当程序载入后执行9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame说明当StatusBar框将要变化时执行10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientationduration:(NSTimeInterval)duration说明当StatusBar框方向将要变化时执行11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url说明当通过url执行12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation说明当StatusBar框方向变化完成后执行13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame说明当StatusBar框变化完成后执行从“Hello World”看iOS应用的生命周期做iPhone开发首先第一件就是得知道iPhone程序的生命周期说白点就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代 码都发生了什么只有理解了这个才能游刃有余的掌握iPhone程序的开发否则在写程序的时候有点浑浑僵僵不知所以然的感觉。首先忘记Xcode给我们 生成的代码模板忘记xib忘记ib,我们亲自一行一行来写一个Hello World程序虽然真正开发项目的时候并不需要这样做Xcode模板和ib都会为我们做好这些打杂的事情但是现在完全由我们自己来写放心这个程序是 个非常的简单的Hello World 程序代码也很少总共加起来不过10几行。在这之前我们先来看看Objective-C语言的关于这段协议代码protocol SimpleProtocol -(void)doSomething:(NSString *)str; end interface SimpleClass:NSObject SimpleProtocol { } end implementation SimpleClass -(void) doSomething:(NSString *)str{ NSLog(str); } end 这样是一个简单的协议示例类SimpleClasss实现了名为SimpleProtocol的协议。协议在其它语言里跟接口非常类似记住这个协议的实现接下来会有用的。接下来用Xcode新建一个名为HelloWorld的Window-based Application类型的项目。大体上讲一下项目的文件结构由Xcode模板生成的项目主要包含Classes(Hello World Appdelegate.h和Hello World Appdelegate.m)、Other Sources(main.m和Hello World_Prefix.pch)、Resources(Main Window.xib和Hello World-info.plist)、Frameworks(iPhone SDK提供的系统框架)、Products(Hello World.app)这几部分。直接运行这个工程会在模拟器里看到一个白色的显示界面程序由此可见没写一行代码Xcode已经给我们生成了一个很简单的 项目模板。每一个iPhone程序都包含一个UIApplication对象,它管理整个程序的生命周期从加载第一个显示界面开始并且监听系统事件、程序 事件调度整个程序的执行。那么上面这个简单项目中的UI Application对象在哪呢在这个项目中我们找不到任何关于UI Application的代码其实在项目中UI Application对象是由UI Application Main方法初始化到内存中首先打开Other Sources文件夹下的main.m源文件里面只包括了一个main方法和所有的C程序一样这个是程序入口。代码如下int main(int argc, char *argv[]) { NSAutoreleasePool * pool [[NSAutoreleasePool alloc] init]; int retVal UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; } 在main函数中第二行代码UI Application Main(argc, argv, nil, nil);对UIApplication对象进行了初始化这个方法除了argc 和 argv 参数外另外这个函数还有2个两个字符串参数来识别UI Application类和UI Application代理类在这里默认是2个nil,第一个参数为nil就默认把UI Application类作为缺省值进行初始化可以在这里不填nil而是使用自己定义的UI Application子类。至于第二个参数nil就设置为nil就把模板生成的Hello World Appdelegate类作为默认值。这里有了UI Application对象怎么又出来一个UI Application代理类对象呢这里需要说明UI Application对象说是管理整个程序的生命周期其实它是什么具体的事情都不干它只负责监听事件当需要做实际工作的时候就交给UI Application代理类去做UI Application相当于传令官负责只把命令传达给UI Application代理类这个士兵然后由这个士兵真正去冲锋陷阵,所以需要给UI Application对象设置代理类。非常不好意思写了一堆罗嗦的文字还没有进入正题不过这些罗嗦还是非常有必要的现在开始编写我们的第一个iPhone程序helloWorld。 上面不是说了要忘记代码模板忘记xib忘记Interfcae Builder嘛这样我们把模板自动生成的部分删除了找到Other Sources文件下main.m删除找到Classes文件夹下的Hello World Appdelegate.h和Hello World Appdelegate.m删除把Resources文件夹下的Main Window.xib删除还有一件事情一定要做那就是打开Resources文件夹下Hello World-info.plist然后找到key为“Main nib file base name”删除因为在上面我们已经删除了Main Window.xib这样就完成的工程的清理变成了一个真正的空的工程没有什么实现代码。完成上面的清理工作后接下来开着我们的编写首先新建程序入口main.m文件已经main方法程序从这里开始代码如下int main(int argc, char *argv[]) { NSAutoreleasePool * pool [[NSAutoreleasePool alloc] init]; int retVal UIApplicationMain(argc, argv, nil, ”SampleDelegate”); [pool release]; return retVal; } NSAutoreleasePool内存自动释放池这个干什么我就不说了你懂得的。这里主要看一下第二行UI Application Main(argc, argv, nil, nil);与模板生成的相比改成UI Application Main(argc, argv, nil, ”SampleDelegate”);这样做我们为UI Application对象设置了名为SampleDelegate代理类上面不是说了UI Application是不处理具体事情的真正做事的是UI Application代理类这个名为SampleDelegate代理类就是我们需要具体写代码实现的当UI Application初始化后就开始监听事件根据不同的监听事件让SampleDelegate代理类做不同的处理比如显示第一个显示界面。新建名为SampleDelegate.m的类在SampleDelegate.h输入如下代码interface SampleDelegate : NSObjectUIApplicationDelegate { } end 注意到没有SampleDelegate: NSObject UIApplicationDelegate这个写法是不是很眼熟 在看看最上面那段Objective-C语言的关于协议代码SimpleClass类需要实现SimpleProtocol协议定义的方法这样看来 UIApplicationDelegate是一个协议定义同样SampleDelegate也需要实现UI Application Delegate中定义的方法只是这个协议是系统定义好的具体可以参看UI Application Delegate.h而SimpleProtocol是我们自己定义的但是要做的事情相同就是SampleDelegate需要去实现这UI Application Delegate协议定义好的方法 这些方法就是UI Application对象监听到系统变化的时候通知UI Application对象代理类SampleDelegate执行的相应方法。下面是SampleDelegate的实现代码写在 SampleDelegate.m中注意到没有SampleDelegate: NSObject UIApplicationDelegate这个写法是不是很眼熟 在看看最上面那段Objective-C语言的关于协议代码SimpleClass类需要实现SimpleProtocol协议定义的方法这样看来 UI Application Delegate是一个协议定义同样SampleDelegate也需要实现UI Application Delegate中定义的方法只是这个协议是系统定义好的具体可以参看UI Application Delegate.h而SimpleProtocol是我们自己定义的但是要做的事情相同就是SampleDelegate需要去实现这UI Application Delegate协议定义好的方法 这些方法就是UI Application对象监听到系统变化的时候通知UI Application对象代理类SampleDelegate执行的相应方法。下面是SampleDelegate的实现代码写在 SampleDelegate.m中:implementation SampleDelegate - (void)applicationWillResignActive:(UIApplication *)application{} - (void)applicationDidBecomeActive:(UIApplication *)application{} - (void)applicationDidEnterBackground:(UIApplication *)application{} - (void)applicationWillEnterForeground:(UIApplication *)application{} - (void)applicationWillTerminate:(UIApplication *)application{} - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{} - (void)applicationSignificantTimeChange:(UIApplication*)application{} - (void)applicationDidFinishLaunching:(UIApplication*)application{} - (void)application:(UIApplication*)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{} - (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration{} - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{ return YES; } - (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation{} - (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame{} end 现在来看协议中定义的这些需要实现的方法分别是什么作用◆- (void)applicationWillResignActive:(UIApplication *)application说明当应用程序将要入非活动状态执行在此期间应用程序不接收消息或事件比如来电话了◆- (void)applicationDidBecomeActive:(UIApplication *)application说明当应用程序入活动状态执行这个刚好跟上面那个方法相反◆- (void)applicationDidEnterBackground:(UIApplication *)application说明当程序被推送到后台的时候调用。所以要设置后台继续运行则在这个函数里面设置即可◆- (void)applicationWillEnterForeground:(UIApplication *)application说明当程序从后台将要重新回到前台时候调用这个刚好跟上面的那个方法相反。◆- (void)applicationWillTerminate:(UIApplication *)application说明当程序将要退出是被调用通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。◆- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application说明iPhone设备只有有限的内存如果为应用程序分配了太多内存操作系统会终止应用程序的运行在终止前会执行这个方法通常可以在这里进行内存清理工作防止程序被终止◆- (void)applicationSignificantTimeChange:(UIApplication*)application说明当系统时间发生改变时执行◆- (void)applicationDidFinishLaunching:(UIApplication*)application说明当程序载入后执行◆- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame说明当StatusBar框将要变化时执行◆- (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration 说明当StatusBar框方向将要变化时执行◆- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url说明当通过url执行◆- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation说明当StatusBar框方向变化完成后执行◆- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame说明当StatusBar框变化完成后执行下图是我总结的一个大概流程图不是很准确但是基本上也说明了整个过程仅供参考。到这为止我们的这个程序运行起来还是什么都没有看到确实我们也没有写具体的功能代码接下来我们要做的就是在屏幕上显示“Hello World”首先知道一下要在屏幕上显示首先需要一个UIWindow对象这个你可以认为是一个电视机然后还需要往这个UIWindow对象里 添加UIView对象, UIView相当于电视上一幕一幕的画面。通过上面的流程知道要在程序后显示可以在applicationDidFinishLaunching方法中处 理这样修改applicationDidFinishLaunching方法如下- (void)applicationDidFinishLaunching:(UIApplication*)application{ UIWindow *window[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; SampleViewController *viewctrl[[SampleViewController alloc]init]; [window addSubview:viewctrl.view]; [window makeKeyAndVisible]; } 上面的代码中做了如下几件事情◆实例化了一个UIWindow对象◆实例化了SampleViewController对象◆把SampleViewController对象UIView对象添加到UIWindow对象中◆显示UIWindow对象看这段代码我们并没有直接实例化一个UIView对象然后添加给UIWindow对象而且通过SampleViewController对象,它是 UIViewController子类负责视图的显示控制非常的好用在这里我们只是实现了loadView就够了我们只要简单的显示一下 “Hello World!”文字 具体代码如下interface SampleViewController : UIViewController {} end implementation SampleViewController -(void)loadView{ UIView *contentView [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; contentView.backgroundColor [UIColor blackColor]; self.view contentView; [contentView release]; CGRect labelFrame CGRectMake(40.0f, 200.0f, 240.0f, 60.0f); UILabel *frontLabel [[UILabel alloc] initWithFrame:labelFrame]; frontLabel.text Hello World!; frontLabel.font [UIFont fontWithName:Georgia size:24.0f]; frontLabel.textColor [UIColor colorWithRed:0.82f green:1.0f blue:0.286f alpha:1.0f]; frontLabel.backgroundColor [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f]; [contentView addSubview:frontLabel]; [frontLabel release]; } end 到这里我们已经完成的Hello World程序的编写点击运行就能看到如下的效果图: 转载于:https://blog.51cto.com/2118740/1056554