接下来开始我们的编写,首先新建程序入口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;
}
看一下第二行UIApplicationMain(argc, argv, nil, nil);与模板生成的相比改成UIApplicationMain(argc, argv, nil, @”SampleDelegate”);这样做我们为UIApplication对象设置了名为SampleDelegate代理类,上面不是说了UIApplication是不处理具体事情的,真正做事的是UIApplication代理类,这个名为SampleDelegate代理类就是我们需要具体写代码实现的,当UIApplication初始化后就开始监听事件,根据不同的监听事件让SampleDelegate代理类做不同的处理,比如显示第一个显示界面。
新建名为SampleDelegate.m的类,在SampleDelegate.h输入如下代码:
@interface SampleDelegate :NSObject<UIApplicationDelegate>{
}
@end
注意到没有,SampleDelegate: NSObject<UIApplicationDelegate>这个写法是不是很眼熟,在看看最上面那段object-c语言的关于协议代码,SimpleClass类需要实现SimpleProtocol协议定义的方法,这样看来UIApplicationDelegate是一个协议定义,同样SampleDelegate也需要实现UIApplicationDelegate中定义的方法,只是这个协议是系统定义好的(具体可以参看UIApplicationDelegate.h)而SimpleProtocol是我们自己定义的,但是要做的事情相同,就是SampleDelegate需要去实现这UIApplicationDelegate协议定义好的方法,这些方法就是UIApplication对象监听到系统变化的时候通知UIApplication对象代理类SampleDelegate执行的相应方法。下面是SampleDelegate的实现代码写在SampleDelegate.m中
SampleDelegate: NSObject<UIApplicationDelegate>看看最上面那段object-c语言的关于协议代码,SimpleClass类需要实现SimpleProtocol协议定义的方法,这样看来UIApplicationDelegate是一个协议定义,同样SampleDelegate也需要实现UIApplicationDelegate中定义的方法,只是这个协议是系统定义好的(具体可以参看UIApplicationDelegate.h)而SimpleProtocol是我们自己定义的,但是要做的事情相同,就是SampleDelegate需要去实现这UIApplicationDelegate协议定义好的方法, 这些方法就是UIApplication对象监听到系统变化的时候通知UIApplication对象代理类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*)applicationwillChangeStatusBarFrame:(CGRect)newStatusBarFrame{}
- (void)application:(UIApplication*)applicationwillChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientationduration:(NSTimeInterval)duration{}
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{
return YES;
}
- (void)application:(UIApplication*)applicationdidChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation{}
- (void)application:(UIApplication*)applicationdidChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame{}
@end
下图是我总结的一个大概流程图,不是很准确但是基本上也说明了整个过程,仅供参考。
![从HelloWorld看iphone程序的生命周期 从HelloWorld看iphone程序的生命周期](http://pic002.cnblogs.com/images/2011/38096/2011032009525313.png)
补充:
![]()
到这为止我们的这个程序运行起来还是什么都没有看到,确实我们也没有写具体的功能代码,接下来我们要做的就是在屏幕上显示“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];
}
上面的代码中做了如下几件事情:
1、 实例化了一个UIWindow对象
2、 实例化了SampleViewController对象
3、 把SampleViewController对象UIView对象添加到UIWindow对象中
4、 显示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.286falpha:1.0f];
frontLabel.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f];
[contentView addSubview:frontLabel];
[frontLabel release];
}
@end
到这里我们已经完成的HelloWorld程序的编写,点击运行