91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IPhone開發純代碼從頭開始

發布時間:2020-06-11 18:48:59 來源:網絡 閱讀:798 作者:走向牛B 欄目:移動開發

       iPhone開發從main函數開始

       本文純屬自己記載自己的學習歷程。可能每個人的感受和經歷不一樣。所以僅供大家隨便看看,不要當真就好,認真你就輸O(∩_∩)O~

       我剛開始學蘋果開發是公司需要,由于沒人帶,也就看著書上的例子,一個個拖控件拖得不亦樂乎,發現蘋果程序還是蠻好寫的,拖幾下控件就能完成很多功能,但是一直沒有大的進步,因為拖控件,而不是純代碼寫的,控件為什么要這樣拖,為什么這一樣設置類都不知道,只能像背書一樣做,一旦有一點不同,可能就弄不出來,而且只會去一個個比較,而不是去找問題,所以說剛入門用IB拖控件對新手是相當不利的,閑話少說,回到正題。

      現在我創建一個名為Simple的project,后面所講的都以這個工程名來說.

       iPhone開發建工程,基本沒有一個工程是完全空的,都是至少給了你mainviewcontroller.xib和一個你建的工程的appdelegate(SimpleAppDelegate),這些東西是干什么用的呢,iPhone開發的程序是怎樣啟動的呢,入口是哪里呢?接下來讓我們一步步去分析。

       首先,我把有這個空的Project的運行步驟大致描述下,首先運行main函數,運行到UIApplicationMain后,系統就知道去Simple-Info.plist中尋找,然后找到了MainWindow.xib,于是就運行,在MainWindow.xib中設置了他的代理為SimpleAppDelegate,于是啟動SimpleAppDelegate函數,在SimpleAppDelegate.m中的didFinishLaunchingWithOptions方法里面將主界面進行設置,然后工程完成啟動.

       現在我們從頭開始寫一個簡單的iPhone程序。以純代碼的方式來向大家呈現(可以參照前面xib的實現).
刪掉所有東西: main函數;
                             Simple-Info.plist中Mainnibbaswname那一行;
                             MainWindow.xib;
                             SimpleAppDelegate的.h和.m文件。

 第一步:首先寫main函數

#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個參數,前面兩個不多說大家知道,重要的是第3,4個參數,第三個參數指的是主類(一個UIApplication的子類,一般為nil就可以了,也可以自己定義一個繼承自UIApplication的類SimpleApplication,然后使用[SimpleApplication description]當第三個參數),重點來了,第四個參數是真正做事的類,他是一個代理(也就是前面說的SimpleAppDelegate),指定SimpleAppDelegate程序才能知道接下來是哪個函數來工作,iPhone開發中UIApplication類自己是不做事的,他把所有的事都讓他的代理去做.

第二步創建一個SimpleAppDelegate類(基于NSObject的)

#import <UIKit/UIKit.h>


@interface SimpleAppDelegate : NSObject<UIApplicationDelegate> {

}
@end
可以看到我在類中添加了UIApplicationDelegate,這是因為SimpleAppDelegate必須實現UIApplicationDelegate的方法,而UIApplicationDelegate具體有哪些方法是由系統幫你已經確定好的,所以可以說任何一個iPhone程序都需要實現UIApplicationDelegate這個代理,這樣我們就是用純代碼建立了一個完全空的程序

接下來,我們用這個空的project來實現在界面上顯示一個Hi,APPLE ,
首先我在.m文件里實現UIApplicationDelegate的一個方法applicationDidFinishLaunching:這個方法是程序啟動時調用的.我在 里面實例化了一個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];
來設置背景色

以下是關于 UIApplicationDelegate的知識,(來源于不知名網友前輩)看了就知道我為什么要用- (void)applicationDidFinishLaunching:(UIApplication*)application這個方法

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*)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
現在來看協議中定義的這些需要實現的方法分別是什么作用:
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)newStatusBarOrientation
duration:(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框變化完成后執行



 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万宁市| 乐至县| 蒙阴县| 明溪县| 曲沃县| 原平市| 平阳县| 凉城县| 深圳市| 大城县| 登封市| 怀柔区| 夏邑县| 阳朔县| 临西县| 卫辉市| 邢台县| 莆田市| 叙永县| 类乌齐县| 鄄城县| 会理县| 喜德县| 民乐县| 育儿| 西平县| 环江| 富顺县| 元谋县| 马边| 莱阳市| 白山市| 关岭| 曲周县| 泽州县| 南川市| 沅江市| 乌鲁木齐县| 德江县| 张北县| 邵武市|