標籤:objective-c iphone xcode
想做IOS開發,培訓之前自己先自學一段時間,於是開一篇新的筆記來記錄學習的點滴吧。
Objective-c是以c語言為基礎的擴充集,當然首先要得熟悉c語言再去學習Objective-c,我是根據《Objective-c基礎教程》來自學的。鄙人初學,如有觀點不同或者錯誤之處請指正亦可貽笑大方。
構建Objective-c程式
我們需要先下載Xcode來作為基本的編輯器,下載安裝完成後我們來建立一個Xcode Project,之後我們選擇
要在Type中選擇Foundation,然後選擇Next,按步驟儲存項目即可。
main.m就是包含了程式的原始碼。
HELLO WORLD 程式:
在C語言中我們可以這樣來輸出Hello World這句話
#include <stdio.h>int main () { printf ("Hello World !"); return 0;}
現在可以在main中輸入以下
#import <Foundation/Foundation.h>int main (int argc,const char *argv[]) { NSLog (@"Hello World !"); return 0;}
點擊左上方的運行後會在下面顯示運行結果,
程式碼分析:
Xcode通過 .m副檔名來表示檔案使用的是Objective-c代碼,應該是由object-c編譯器處理。那麼如果由c語言基礎,不難看懂是由main()函式宣告語句和return 語句結尾。這裡的
#import <Foundation/Foundation.h>
語句告訴編譯器尋找Foundation架構中的Foundation.h標頭檔。
那麼什麼是架構呢?所謂的架構就是一種把標頭檔、庫、圖片、聲音等內容聚集在一個獨立單元中的集合體,Foundation屬於Cocoa工具包中的內容,主要處理的是使用者介面之下的那些(Layer)的特性,比如資料結構和通訊機制。
我們使用的唯一一行Object-c語句的實際代碼就是用了NSLog()函數
NSLog(@"Hello World !");
這行代碼是向控制台輸出Hello World !在C語言中常用的是printf()語句。NSLog()接受一個字串作為其第一個參數,該字元可以包含格式說明符例如:%d,此函數會接受與其格式說明符相匹配的其他參數。當然,Objective-c是c語言的拓展集,在輸出時依然可以使用printf()函數來進行輸出(建議使用NSLog)。
@符號是什麼東西?
@符號是Objective-c在C語言基礎上添加的特性之一。@意味著引號內的字串應該作為Cocoa的NSString元素來處理。
NSString又是什嗎?
NSString是Cocoa中的字串。NSString支援:字串長度,字串比較以及整形或浮點值轉換等等。
NS是指什嗎?
Cocoa在給所有的函數、常量和變數以及類型名都添加了NS首碼。這個首碼告訴我們這個函數是來自Cocoa而不是其他的工具包。
另外,例如NSArray存放數組,NSDateFormatter來設定不同的時間格式,NSThread提供多線程,NSSpeechSynthesizer能夠聽到語音。
布爾類型:
在c語言中,布爾類型有True和False兩個值,在Objective-c中則是YES和NO兩個值。
下面是一個簡單的例子:
#import <Foundation/Foundation.h>
BOOL areIntsDifferent (int thing1,int thing2) { if (thing1== thing2) { return (NO); } else { return (YES); }}NSString *boolString (BOOL yesNo) { if (yesNO == NO) { return (@"NO"); } else { return (@"YES"); }}int main (int argc, const char *argv[]) { BOOL areTheyDifferent; areTheyDifferent = areIntsDifferent (5,5); NSLog(@"are %d and %d different ? %@",5,5,boolString(areTheyDifferent)); areTheyDifferent = areIntsDifferent (23,42); NSLog(@"are %d and %d different ? %@",23,42,boolString(areTheyDifferent)); return (0);}
程式碼分析:
首先是areIntsDifferent()函數,
BOOL areIntsDifferent (int thing1,int thing2) { if (thing1== thing2) { return (NO); } else { return (YES); }}
接受兩個整形的參數,返回一個BOOL值,根據thing1和thing2來進行比較,如果相同返回NO,如果不同返回YES
第二個函數是,
NSString *boolString (BOOL yesNo) { if (yesNO == NO) { return (@"NO"); } else { return (@"YES"); }}
這個函數的主要作用是將bool值轉化為顯而易見的字串。boolString()的返回值是一個指向NSString的指標,這意味著函數會返回一個Cocoa字串。
main()函數
areTheyDifferent變數儲存了areIntsDifferent()的返回的YES或者NO。
那麼在NSLog裡面的%@是什麼意思呢?
在NSString()中返回了一個指標,在NSLog中寫%@格式說明符是為了通知NSLog接受適當的參數,將其作為NSString,並且使用字串中的字元將其發送到控制台中。