您好,登錄后才能下訂單哦!
本文純屬自己記載自己的學習歷程。可能每個人的感受和經(jīng)歷不一樣。所以僅供大家隨便看看,不要當真就好,認真你就輸O(∩_∩)O~
我剛開始學蘋果開發(fā)是公司需要,由于沒人帶,也就看著書上的例子,一個個拖控件拖得不亦樂乎,發(fā)現(xiàn)蘋果程序還是蠻好寫的,拖幾下控件就能完成很多功能,但是一直沒有大的進步,因為拖控件,而不是純代碼寫的,控件為什么要這樣拖,為什么這一樣設(shè)置類都不知道,只能像背書一樣做,一旦有一點不同,可能就弄不出來,而且只會去一個個比較,而不是去找問題,所以說剛?cè)腴T用IB拖控件對新手是相當不利的,閑話少說,回到正題。
現(xiàn)在我創(chuàng)建一個名為Simple的project,后面所講的都以這個工程名來說.
iPhone開發(fā)建工程,基本沒有一個工程是完全空的,都是至少給了你mainviewcontroller.xib和一個你建的工程的appdelegate(SimpleAppDelegate),這些東西是干什么用的呢,iPhone開發(fā)的程序是怎樣啟動的呢,入口是哪里呢?接下來讓我們一步步去分析。
首先,我把有這個空的Project的運行步驟大致描述下,首先運行main函數(shù),運行到UIApplicationMain后,系統(tǒng)就知道去Simple-Info.plist中尋找,然后找到了MainWindow.xib,于是就運行,在MainWindow.xib中設(shè)置了他的代理為SimpleAppDelegate,于是啟動SimpleAppDelegate函數(shù),在SimpleAppDelegate.m中的didFinishLaunchingWithOptions方法里面將主界面進行設(shè)置,然后工程完成啟動.
現(xiàn)在我們從頭開始寫一個簡單的iPhone程序。以純代碼的方式來向大家呈現(xiàn)(可以參照前面xib的實現(xiàn)).
刪掉所有東西: main函數(shù);
Simple-Info.plist中Mainnibbaswname那一行;
MainWindow.xib;
SimpleAppDelegate的.h和.m文件。
第一步:首先寫main函數(shù)
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv,nil , @"SimpleAppDelegate");
[pool release];
return retVal;
}
int retVal = UIApplicationMain(argc, argv, nil, nil);
這一行的時候,大家注意,UIApplicationMain一共有4個參數(shù),前面兩個不多說大家知道,重要的是第3,4個參數(shù),第三個參數(shù)指的是主類(一個UIApplication的子類,一般為nil就可以了,也可以自己定義一個繼承自UIApplication的類SimpleApplication,然后使用[SimpleApplication description]當?shù)谌齻€參數(shù)),重點來了,第四個參數(shù)是真正做事的類,他是一個代理(也就是前面說的SimpleAppDelegate),指定SimpleAppDelegate程序才能知道接下來是哪個函數(shù)來工作,iPhone開發(fā)中UIApplication類自己是不做事的,他把所有的事都讓他的代理去做.
第二步創(chuàng)建一個SimpleAppDelegate類(基于NSObject的)
#import <UIKit/UIKit.h>
@interface SimpleAppDelegate : NSObject<UIApplicationDelegate> {
}
@end
可以看到我在類中添加了UIApplicationDelegate,這是因為SimpleAppDelegate必須實現(xiàn)UIApplicationDelegate的方法,而UIApplicationDelegate具體有哪些方法是由系統(tǒng)幫你已經(jīng)確定好的,所以可以說任何一個iPhone程序都需要實現(xiàn)UIApplicationDelegate這個代理,這樣我們就是用純代碼建立了一個完全空的程序
接下來,我們用這個空的project來實現(xiàn)在界面上顯示一個Hi,APPLE ,
首先我在.m文件里實現(xiàn)UIApplicationDelegate的一個方法applicationDidFinishLaunching:這個方法是程序啟動時調(diào)用的.我在 里面實例化了一個window,因為我們需要一個主窗口
#import "SimpleAppDelegate.h"
@implementation SimpleAppDelegate
- (void)applicationDidFinishLaunching:(UIApplication*)application{
UIWindow * window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
[window makeKeyAndVisible];
}
新建一個類NewViewController(基于NSObject)
#import <UIKit/UIKit.h>
@interface NewViewController : UIViewController {
}
@end
因為要顯示在界面上,所以繼承了UIViewController
#import "NewViewController.h"
@implementation NewViewController
-(void)loadView
{
[super loadView];
UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30)];
label.text = @"Hi,APPLE";
[self.view addSubview:label];
[label release];
}
@end
這樣一個純代碼的工程完成,在界面上顯示了Hi,APPLE,view的默認顏色的黑色的,如果想換顏色可以在NewViewController.m的loadView中使用 self.view.backgroundColor = [UIColor yellowColor];
來設(shè)置背景色
以下是關(guān)于 UIApplicationDelegate的知識,(來源于不知名網(wǎng)友前輩)看了就知道我為什么要用- (void)applicationDidFinishLaunching:(UIApplication*)application這個方法
UIApplicationDelegate是一個協(xié)議定義,同樣SampleDelegate也需要實現(xiàn)UIApplicationDelegate中 定義的方法,只是這個協(xié)議是系統(tǒng)定義好的(具體可以參看UIApplicationDelegate.h)而SimpleProtocol是我們自己定義 的,但是要做的事情相同,就是SampleDelegate需要去實現(xiàn)這UIApplicationDelegate協(xié)議定義好的方法, 這些方法就是UIApplication對象監(jiān)聽到系統(tǒng)變化的時候通知UIApplication對象代理類SampleDelegate執(zhí)行的相應(yīng)方 法。下面是SampleDelegate的實現(xiàn)代碼寫在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
現(xiàn)在來看協(xié)議中定義的這些需要實現(xiàn)的方法分別是什么作用:
1、- (void)applicationWillResignActive:(UIApplication *)application
說明:當應(yīng)用程序?qū)⒁敕腔顒訝顟B(tài)執(zhí)行,在此期間,應(yīng)用程序不接收消息或事件,比如來電話了
2、- (void)applicationDidBecomeActive:(UIApplication *)application
說明:當應(yīng)用程序入活動狀態(tài)執(zhí)行,這個剛好跟上面那個方法相反
3、- (void)applicationDidEnterBackground:(UIApplication *)application
說明:當程序被推送到后臺的時候調(diào)用。所以要設(shè)置后臺繼續(xù)運行,則在這個函數(shù)里面設(shè)置即可
4、- (void)applicationWillEnterForeground:(UIApplication *)application
說明:當程序從后臺將要重新回到前臺時候調(diào)用,這個剛好跟上面的那個方法相反。
5、- (void)applicationWillTerminate:(UIApplication *)application
說明:當程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作。這個需要要設(shè)置UIApplicationExitsOnSuspend的鍵 值。
6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
說明:iPhone設(shè)備只有有限的內(nèi)存,如果為應(yīng)用程序分配了太多內(nèi)存操作系統(tǒng)會終止應(yīng)用程序的運行,在終止前會執(zhí)行這個方法,通常可以在這里進行內(nèi)存清 理工作防止程序被終止
7、- (void)applicationSignificantTimeChange:(UIApplication*)application
說明:當系統(tǒng)時間發(fā)生改變時執(zhí)行
8、- (void)applicationDidFinishLaunching:(UIApplication*)application
說明:當程序載入后執(zhí)行
9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
說明:當StatusBar框?qū)⒁兓瘯r執(zhí)行
10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
說明:當StatusBar框方向?qū)⒁兓瘯r執(zhí)行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
說明:當通過url執(zhí)行
12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
說明:當StatusBar框方向變化完成后執(zhí)行
13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
說明:當StatusBar框變化完成后執(zhí)行
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。