天天看點

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

前面我們已經用了幾章内容進行c語言介紹,當然要通過幾篇文章完整的介紹c語言的知識是不太現實的,例如c語言的檔案操作、記憶體申請等我們都沒有重點介紹,當然核心知識點基本都已經提到了,後面有時間我們會繼續擴充。今天我們正式開始學習objective-c,以後簡稱“objc”,objc是在c語言的基礎上加上了一層面向對象的特性,它完全相容c語言,甚至可以混寫c++。它是mac os x和ios的主要開發語言,從ios釋出之後可以說objc的地位呈直線上升趨勢,目前objc已經是僅次于c語言、java的第三大程式設計語言。今天我們先簡單的看一下c語言的一些基礎内容:

<a href="http://www.cnblogs.com/kenshincui/p/3861300.html#firstoc">第一個objc程式</a>

<a href="http://www.cnblogs.com/kenshincui/p/3861300.html#datatype">基本資料類型</a>

打開xcode,建立一個新項目

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

選擇指令行程式

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

選擇程式語言為ojbective-c并輸入項目名稱

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

選擇儲存目錄

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

預設生成一個基本的項目結構

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

程式源代碼

上面是通過xcode建立的第一個objc程式,這是一個經典的“hello,world!”。運作結果如下:

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型

下面對上面的代碼做一下簡單解釋:

首先#import是一個導入指令,類似于c語言的#include指令,但是相對于#include而言,#import有效的處理了重複導入的問題,在c語言中也提到過如何通過條件編譯解決重複導入,而在objc中你不需要處理了,#import已經自動進行了重複處理;與#include類似,導入系統類庫使用&lt;&gt;,導入自定義類庫使用””;

foundation.h是foundation架構中的頭檔案,這是objc中的一個基礎類庫,基本上後面我們用到的所有objc的代碼都需要引入這個類庫;

@autoreleasepool是objc的關鍵字,它的作用是對包含在這個關鍵字後面大包括内的程式會自動進行記憶體回收,不需要開發人員手動釋放無用的對象;當然表面上看起來這有點類似于c#和java的記憶體垃圾回收機制,但是事實上他們的原理完全不同,以後再做具體解釋。

nslog是标準輸出函數,類似于c語言中的printf()函數,但是它會自動換行,當然它同樣支援格式輸出(例如%i表示輸出整形資料,%f輸出浮點型資料),這個函數在fundation.h中聲明;

@”hello,world!”,是一個字元串常量,在objc中字元串前需要使用@符号;

objc中沒有命名空間(c#)或包(java)的概念,那也就是說在同一個應用中不能同時存在兩個完全相同的類名,通常情況下我們通過字首加以區分,例如在objc中的nsstring、nslog中的ns就是字首。

ns其實是nextstep縮寫,是喬布斯離開蘋果後在next公司所開發的系統,這個作業系統在當時雖然沒有獲得廣泛認同,但是卻為後面mac ox奠定了基礎。

objc中很多關鍵字都是以@開頭(例如@autoreleasepool、@interface、@protocol),另外需要注意的是為了區分c語言中的字元串,objc中的字元串也必須加上@。

在objc中的基本資料類型除了c語言中的char、int、float、double之外還有:

bool類型,包含兩個值yes和no,其實objc中的布爾類型就是整數1和0;

id類型,是一個對象類型,可以表示所有對象;

nsstring是fundation架構中定義的字元串類型;

關于上面id類型在這裡不做過多的解釋,後面我們會專門說到,下面列出常用格式符:

iOS開發系列—Objective-C之基礎概覽概覽第一個ObjC程式基本資料類型
注意 1.在c或者objc中整形可以使用%i也可以使用%d來格式化,隻有使用scanf()輸入的時候二者才有差別(由于%d始終被編譯器解釋為decimal intergeer是以即使輸入010會被認為是整形10,而%i則會将前面的0或者0x認為此輸入是八進制或十六進制整數); 2.%p本質就是輸出指針位址,在32位編譯器下對于一個指針類型使用%x輸出和%p輸出其實是一樣的,隻是後者會在前面加上“ox”(注意在64位編譯器下由于指針長度8byte,而整形隻有4byte是以%x輸出的内容隻是%p的低位資料);