之前一直做J2EE开发,没有第一次接触Objective-C,对其语法觉得很奇怪,经过了一个礼拜的学习,终于学完了Objective-C语法,开始了IOS的开发,看传智的OC基础的视频,写完的demo以及IOS程序运行的原理分析简单做笔记如下:
1、每一个应用程序都有一个属于自己的界面UIWindow,UIWindow继承自UIView
UIView:视图,屏幕上所有看得见,摸得着的都是一个UIView
2、UIView面临问题:
(a)UIView之间的切换
(b)管理UIView的生命周期
(c)给UIView装配数据源
上面三点有控制器(UIViewController)来完成的
UIViewController:内部默认有个UIView视图,负责管理UIView的生命周期、
装配数据到UIView上显示、处理UIView事件
IOS采用了MVC的设计模式
运行原理:
1、首先执行main函数
2、执行UIApplicationMain函数
3、UIApplicationMain函数内部
UIApplicationMain:第三个参数指定application的类名(或子类),如果为nil,则默认是UIApplication,第四个参数指定代理的类名
1> 创建一个UIApplication实例。这个UIApplication是个单例的,一个IOS程序对应一个UIApplication对象
2> UIApplication对象是应用程序的象征
3> 开启一个消息循环(main loop):用于监听手机上面的事件
4> 再创建一个UIApplication的delegate对象,负责监听UIApplication的生命周期
5> 当UIApplication的生命周期发生改变时,会给delegate发送不同的消息
* 当第一次运行程序的时候:
didFinishLaunchingWithOptions(加载完毕)->
applicationDidBecomeActive(获取焦点)->
* 当点击HOME键的时候:
applicationWillResignActive(失去焦点)->
applicationDidEnterBackground(进入后台)
* 当再次点击应用图标,重新进入应用时
applicationWillEnterForeground(进入前台)->
applicationDidBecomeActive(获取焦点)
创建一个IOS项目
#import "GPBAppDelegate.h"
#import "GPBViewController.h"
@implementation GPBAppDelegate
- (void)dealloc
{
[_window release];
[_viewController release];
[super dealloc];
}
#pragma mark 应用程序加载完毕之后调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"didFinishLaunchingWithOptions->加载完毕");
//初始化一个窗口
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
//传入xib 文件名,来初始化yige控制器
self.viewController = [[[GPBViewController alloc] initWithNibName:@"GPBViewController" bundle:nil] autorelease];
//设置窗口的根控制器
self.window.rootViewController = self.viewController;
//窗口不会默认显示,需要调用方法显示
//keyWindow是主窗口,只有主窗口才能和用户交互
[self.window makeKeyAndVisible];
// self.window.hidden = NO;
return YES;
}
#pragma mark 程序失去焦点的时候调用(不跟用户交互了)
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive->失去焦点");
}
#pragma mark 当应用程序进入后台的时候调用(点击HOME键)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"applicationDidEnterBackground->进入后台");
}
#pragma mark 当应用程序进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"applicationWillEnterForeground->进入前台");
}
#pragma mark 当应用程序获取焦点的时候调用
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive->获取焦点");
}
#pragma mark 程序被在某些情况下被终结的时候被调用
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"applicationWillTerminate->终结");
}
@end
GPBViewController.m文件:
#import "GPBViewController.h"
@interface GPBViewController ()
@end
@implementation GPBViewController
- (IBAction)login{
NSString *name = _name.text;
NSString *pwd = _pwd.text;
NSLog(@"name=%@, password=%@", name, pwd);
//调出键盘的那个视图是第一响应者(firstResponder)
//代表这个视图,不想当第一响应者了,于是键盘退出
// [_name resignFirstResponder];
// [_pwd resignFirstResponder];
//如果第一响应者存在self.view里面,就可以退出键盘
[self.view endEditing:YES];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end