之前一直做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