IOS開發入門教程-總結篇-寫給狂熱的編程愛好者們

來源:互聯網
上載者:User

標籤:

程式發輕狂,代碼闌珊,蘋果開發安卓狂!——寫給狂熱的編程愛好者們

寫在前面的話

學習iOS應用程式開發已有一段時間,最近稍微閑下來了,正好也想記錄一下前階段的整個學習過程。索性就從最基礎的開始,一步一步記錄一個最簡單的 iOS應用從建立到啟動並執行全過程,其中會穿插很多相關知識或是遇到過的問題。其實算不上教程,但希望能夠協助更多的開發愛好者更快、更好的入門。

iOS開發環境簡述

最友好,最現實,也是最方便的開發環境就是在Mac系統中安裝Xcode進行開發。原因在於:第一,開發工具(Xcode)限制。蘋果官方只提供 Mac版的Xcode,而Xcode內建了Xcode IDE,效能分析工具,iOS SDK,iOS模擬器和最新的OS X,可以方便迅速的進行代碼編輯以及應用調試,可謂是Mac和iOS開發工具的不二選擇。第二,代碼提示和自動補全。iOS開發中用到的類或方法的名稱, 為了更具語義化,讓開發人員一目瞭然,通常會比較長,這往往會讓剛剛接觸iOS開發的開發人員為了記住這些方法而傷透腦經。而Xcode擁有優於其他編輯器的 OC代碼提示和自動補全功能,這將很大程度降低開發入門的門檻,這決定你開發iOS應用沒有理由不使用Xcode。因此,使用非蘋果電腦的開發人員們最好安 裝Mac OS X的虛擬機器,進行開發學習,否則你不僅會比別人花上多出一倍甚至更多的時間去搭建開發環境,而且代碼編寫上也會比使用Xcode開發的人花上更多的精力。

第一步,建立項目1.1 建立iOS項目

開啟Xcode,如果是首次開啟Xcode,你將會看到一個歡迎介面,:

你可以直接在該介面中點擊圖中1處標記的 Create a new Xcode project 來建立一個項目,也可以點擊圖中2處標記的按鈕來開啟電腦中已經存在的Xcode項目。你還可以修改3處標記的複選框狀態設定下次啟動Xcode是否顯示該歡迎介面。

本文不示範在此點擊1處所示建立項目,首先點擊該介面左上方的紅色按鈕退出該歡迎介面,然後點擊螢幕左上方的 File -> New -> Project 。如下:

接下來你將看到如下介面:

首先進行系統篩選,iOS應用則選擇iOS列表對應項,OS X應用則選擇OS X列表對應項。本例為iOS應用,故在此選擇iOS中的 Application (圖中左上方紅框所示),然後選擇應用模板選擇,在介面右邊列出了多種最常執行的 App模板類型,開發人員按照自己的應用需求可自行選 擇,本例選擇 Single View Application (圖中右上方紅框所示)。做完以上選擇後點擊視窗右下角Next按鈕,進入下一個設定視窗:

此處內容會根據個人情況而不同,故不做贅述,按照視窗提示,填寫相關資訊即可。注意視窗下方的三個複選框,其功能分別是使用storyboards、使用自動引用計數器、包含單元測試,根據個人情況勾選/取消即可。設定完成後點擊右下角Next按鈕,進入下一個視窗:

按照視窗所示,選擇項目儲存位置後點擊視窗右下角Create按鈕,完成應用建立過程。

1.2 應用程式目錄結構說明

項目建立完成之後,Xcode會進入項目開發介面,介面大致分為三部分,左側項目及目錄結構列表、中間為代碼編輯區、右側屬性設定和控制項列表等地區。下面是目錄結構的:

項目初始時包含三個主要目錄,後續開發中開發人員可以自行添加目錄。其中:

  • FirstIosApp 目錄與項目名稱同名,主要存放應用相關原始碼和設定檔;
  • Framework 存放項目使用到的架構,預設會添加圖示三個必備架構;
  • Products 用於存放產生的應用檔案,開發中開發人員一般不必關心。
1.3 應用程式初始結構概覽

整個應用程式的入口檔案預設為 AppDelegate.m ,應該可以通過設定檔修改(未嘗試)。其內部結構如下:

該檔案包含應用程式生命週期中各個階段可以調用的方法介面,以便應用程式在不同的狀態階段能進行相應的操作。這些方法就不一一說明了,開發人員幾乎可以望名知意。

1.3.1 iOS應用程式的生命週期

對於上面圖示方法如果還有不解的地方,可以參考(來源於網路):

第二步 代碼入門(資料類型)

做iOS開發,僅僅懂得使用Xcode,僅僅瞭解目錄結構,僅僅瞭解生命週期,是遠遠不夠的,這些只是基礎中的基礎。一定的編程能力也是必不可少的。下面就簡單的介紹一下iOS開發的程式設計語言——Objective-C,後面簡稱OC。

學習一門語言,往往需要從最基礎的資料類型開始(記得大學學習的時候老師就是這麼乾的),至於編程邏輯,奇技淫巧等則是在開發過程中慢慢積累的。好言歸正傳。

2.1 基礎資料類型

OC是C語言的一個超類,因此OC擁有C或C++的幾乎所有特性,當然它也有自己獨具一格的地方。所以OC也支援C語言的資料類型,諸如int,float等也都可以在OC中使用。基礎資料類型不是本文重點,在此就不多言辭了。

2.2 OC資料類型

OC不是僅僅只能使用C/C++的資料類型,它也擁有自己的資料類型,雖然與通常人們熟知的各種資料類型看起來有點怪異,但事實上OC的資料類型是個很好玩的東西,也不難理解。下面列舉幾個常見的OC資料類型。

2.1.1 NSNumber類和NSInterger

NSNumber是以對象的形式來封裝基礎資料類型,它提供一下方法:

+ (NSNumber *) numberWithChar: (char) value;+ (NSNumber *) numberWithInt: (int) value;+ (NSNumber *) numberWithFloat: (float) value;+ (NSNumber *) numberWithBool: (BOOL) value;

例如,要從一個int資料初始化一個NSNumber可以這樣寫:

NSNumber *number = [NSNumber numberWithInt: 100];

而要從NSNumber執行個體得到NSInteger資料則可以如下操作:

NSInteger integer = [number intValue];
2.1.2 NSString類型

NSString是OC的字串類。與一般字元串不同的是NSString的值需要在一般字元串前加上一個”@"符號。例如要初始化一個”I’m a string.”的OC字串,我們需要這樣做:

NSString *str = [NSString stringWithString: @"I‘m a string."];

看起來很麻煩,很複雜的樣子,不要擔心,OC應該也考慮到了這一點,所以它也提供簡寫形式:

NSString *str = @"I‘m a string.";

NSString類還提供了很多其他形式的建立字串的方法(比如:stringWithFormat等),這裡就不一一列舉了,以後在開發中慢慢體會吧。

2.1.3 NSArray類型

NSArray是OC的數組類。OC的數組是很強大的,在一個數組中可以允許存在不同類型的資料,這個特性就跟強大的JavaScrit一樣。初始化一個數組可以這樣操作:

NSArray *arr = [NSArray arrayWithObjects:@"a", @"b", @1, nil];

當然也支援簡化形式:

NSArray *arr = @[@"a", @"b", @1];

需要說明一點,使用arrayWithObjects方法建立數組的時候最後需要以nil結尾,而使用簡化方式的時候不需要。

開發中可以使用以下兩種形式擷取數組對應索引位置(index)的值:

NSString *a = arr[index];
NSString *b = [arr objectAtIndex: index];
2.1.4 NSDictionary類型

NSDictionary是OC的字典類。字典類型在使用中以key-value索引值對的形式存在。也支援多種初始化方式,下面列舉兩種:

NSDictionary *dic = [NSDictionary dictionaryWithObjects:@[@"a",@"b", @"c"] forKeys:@[@"first", @"second", @"third"]];
NSDictionary *dic = @{@"first": @"a", @"second": @"b", @"third": @"c"};

取值方法跟NSArray大同小異:

NSString *a = [dic objectForKey: @"first"];
NSString *b = dic[@"second"];
2.1.5 NSDate類型

NSDate是OC的日期類。常見用法舉例:

NSDate *date = [NSDate date]; //返回目前時間
NSDate *date = [[NSDate alloc] init]; //初始化為目前時間,類似date
第三步 OC類的認識(成員變數和方法)

iOS開發常常伴隨著視圖,而視圖往往離不開視圖控制器,在iOS開發中每一個視圖控制器就是一個OC的類,因此學習iOS開發就必須瞭解OC的類。

OC的類使用 @interface ClassName: superClass <protocol> … @end 結構來定義,NSObject是所有OC類的父類。與java相比OC的 @interface 關鍵字就等同於JAVA的 class 關鍵字,OC的 protocol 就是JAVA中的 interface ,這一點很據迷惑力,大家在學習時需要特別注意。

3.1 類的聲明

舉例聲明一個Person的類(視圖控制器)並實現它,擁有 name 、 age 兩個成員變數,自然需要定義 getName 和 setName 、 getAge 和 setAge ,下面我們看下這個過程。

首先,類的結構如下:

@interface Person: NSObject {    NSString *name;    int age;}@end

然後,我們聲明它的setter和getter方法,用來設定和讀取它的成員變數的值。按照傳統方式應該如下定義:

@interface Person: NSObject {    NSString *name;    int age;}- (void) setName: (NSString *) newName;- (NSString *) getName;- (void) setAge: (int) newAge;- (int) getAge;@end

看,是不是很簡單?然而,既然上面說了是傳統方式,那麼肯定OC還提供了更現代的方式:

@interface Person: NSObject {    NSString *name;    int age;}@property(nonatomic, strong) NSString *name;@property(nonatomic, assign) int age;@end

沒錯,你沒看錯,就這麼簡單,它的功能和上面的代碼是一樣的。補充一下,@property本身可以接受參數來指定變數的getter和setter方式,其參數可用值和具體功能如下:

nonatomic //聲明變數只在單線程中工作atomic //預設值,可能有多個線程會用到這個變數copy //分配一個新的空間,把原地址的內容複寫過來assign //簡單的傳遞指標retain //傳遞指標後引用計數器(retainCount)會自加1strong //強引用weak //弱引用

聲明就這樣就完成了,下面我們看下它的具體實現,在OC中類的實現需要使用另外一個關鍵字 @implementation ,格式如下:

@implementation Person@end

我們還是先看下傳統方式聲明getter和setter方法該如何?:

@implementation Person- (void) setName: (NSString *) newName {    self.name = newName;}- (NSString *) getName {    return self.name;}- (void) setAge: (int) newAge {    self.age = newAge;}- (int) getAge {    return self.age;}@end

看完傳統實現方式,是不是很想一睹現代方式的風采?我們繼續往下看:

@implementation Person@synthesize name;@synthesize age;//或者直接下面一句//@synthesize name,age;@end

是不是很神奇?在新版的Xcode中,@synthesize是可以省略的,但是建議還是都寫上。

3.2 “+”和“-”

仔細的讀者應該已經發現在上面的傳統方式中包含了一個神奇的符號“-”。這個是什麼意思呢?首先我們需要說明一下,一個類可以擁有成員變數和方法,而方法可以包含類方法和執行個體方法。所謂類方法是可以使用類名直接調用的方法,而執行個體方法是需要該類的執行個體才可以調用的方法。而在OC中使用“+”表示該方法為類方法,而“-”很簡單自然是表示執行個體方法了。

至於方法的聲明和實現大致和傳統方式聲明getter和setter是一樣的,這部分就不再重複了。

第四步 運行和調試

每一個應用的開發過程都是漫長的,而在這個過程中我們免不了需要不時的運行一下程式,看看當前的效果,檢查一下代碼是否存在異常或者錯誤。

4.1 iOS模擬器4.1.1 選擇裝置

Xcode的強大不是吹出來的,在Xcode中內建了iOS模擬器,能夠類比幾乎所有iOS真機的功能,因此開發人員可以通過iOS模擬器測試正在開發中的應用程式,提高開發效率,減少錯誤,節省開發時間。在運行前選擇與應用對應的類比裝置是必須的,否則可能導致運行結果出現意外的問題。

在Xcode的功能表列下方提供了選擇模擬器的地方,:

選擇好模擬器後點擊左側的Run按鈕,就可以在指定的模擬器中啟動應用了。第一次啟動模擬器一般會比較慢,後面就好了。同樣可以點擊Run旁邊的Stop按鈕,停止模擬器中的當前應用。也許有些時候你想獨立運行iOS模擬器,而不啟動當前應用,這也是可以的,請看:

也許相同的裝置,但是卻又多個尺寸,多個螢幕解析度,例如:iPhone就有4、4S、5等。那怎麼選擇呢?別當心,有模擬器呢:

真是iOS模擬器在手,開發調試不用愁啊!

4.1.2 模擬器自訂設定

看完了上面的介紹,是不是感覺有一種馬上動手的衝動?先別急,還有更進階的呢!大家知道,現在很多流行的iOS應用都有定位功能,那麼在模擬器怎麼測試定位呢?看看你就明白了:

4.1.3 儲存螢幕快照

開發應用程式通常都不是一步到位的,過程中可能會產生各種各樣稀奇古怪的現象,也許是顯示不正常,也許是出現意外的效果,也或者你想把你當前的顯示效果分享給Team Dev的其他成員,這個時候作為開發人員,你也許想要記錄出現的這些現象,比如:、錄屏什麼的。這些都是不錯的方法,但是iOS模擬器擁有更加方便的方式,:

4.2 程式調試

每一個開發人員都不能保證他的程式是完美的,所以通常在我們運行程式的時候會出現很多奇怪的警告或者錯誤,有的可以一目瞭然,迎刃而解,有的卻隱藏得很深,很難發現。這時候斷點調試就直觀重要了。

在代碼編輯器的左邊的行號區,滑鼠在這個地區單擊可以在對應行上添加/關閉(不是刪除)斷點。啟動斷點,當再次運行程式的時候,程式若執行到當前行,則會暫停在當前行上,開發人員可以在控制台看到斷點處記錄的資訊。大致

,在斷點處我們可以在控制台看到變數date的當前值以及記憶體位址等資訊,這樣就可以通過這些資訊判斷程式運行到該處時是否正常,也可以這樣查看一些其他資訊。

4.3 NSLog

有些時候我們可能會遇到一些僅靠斷點無法解決的問題,這時我們還可以藉助NSLog進行調試。NSLog也用於在控制台輸出資訊。

好了,到此告一段了,希望能協助大家。


轉載自 http://www.seejs.com/?p=102

IOS開發入門教程-總結篇-寫給狂熱的編程愛好者們

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.