標籤:style blog http io ar os 使用 sp strong
OC語言前期準備
一、OC簡介
Oc語言在c語言的基礎上,增加了一層最小的物件導向文法,完全相容C語言,在OC代碼中,可以混用c,甚至是c++代碼。
可以使用OC開發mac osx平台和ios平台的應用程式。
拓展名:c語言-.c OC語言.-m 相容C++.-mm
註:其實c語言和oc甚至任何一門語言都只是我們為了實現一些功能,達到一些效果而採用的工具,拋開文法的差別外,我想最重要的應該是在解決問題的時候考慮的角度和方法不一樣而已,然而這也構成了學習一門語言的重要性。
二、文法預覽
(一)關鍵字
基本上所有的關鍵字都是以@開頭的(為了與c語言的關鍵字區分開來),如@interface @implementation @public等,少部分沒有以@開頭,如id,_cmd等
(二)字串以@開頭
C語言字串:“hello”
OC語言字串:@“hello”
(三)其他文法
基本類型:5種,增加了布爾類型
Nil相當於是null,也就是0。
螢幕輸出:NSLog(@“hello”);//自動換行
NSLog(@“age is %d”,2);
三、OC程式開發過程
#import預先處理指令有兩個作用:(1)與#include一樣,拷貝檔案內容(2)可以自動防止檔案的內容被重複拷貝
程式編譯串連過程:
源檔案(.m)---(編譯)---->目標檔案(.0)-----(連結)---->可執行檔(.out)
Foundation架構。如果要使用架構中的所有標頭檔那麼應該怎麼辦?包含架構的主標頭檔。主標頭檔是一個架構中最主要的標頭檔,每個架構的主標頭檔名和架構名一致。
如#import<foundation/foundation.h>
運行過程如下:
(1)編寫OC源檔案 .m .c
(2)編譯檔案 cc -c xx.m xxx.c
(3)連結 cc xx.o xxx.o -framework Foundation
(4)運行 ./a.out
四、類型補充
Int main()
{
BOOL b=YES;
BOOL b1=NO;
BOOL b2=1;// YES
BOOL b3=2;// NO
NSLog(@“%i”,b);
}
BOOL類型與其他類型的用法一致,BOOL類型的本質是char類型的,定義如下:
Typedef signed char BOOL
宏定義:
#define YES (BOOL)1
#define NO (BOOL)0
布爾類型的輸出一般當做整數來用。
五、物件導向
OC語言是物件導向的,c語言是面向過程的,物件導向和面向過程只是解決問題的兩種思考方式,面向過程關注的是解決問題涉及的步驟,物件導向關注的是設計能夠實現解決問題所需功能的類。
術語:OO物件導向、OOP物件導向編程
六、類
(一)關於類
類的設計只關注三個東西:類名、屬性和方法
注意:一般名詞都是類,擁有相同屬性和行為的對象都可以抽象為一個類,類名是標識符的一種,需要符合規範,通常類名的第一個字母大寫,且不能有底線,如果有多個單詞則使用駝峰標識。在對方法進行類的劃分中,一般採取的做法是誰最熟悉這個方法那麼就把這個方法劃分給誰。在OC中,對象對方法的調用稱為訊息機制,即向既定的對象發送了什麼訊息。
(二)簡單記憶體分析
類建立對象,每個對象在記憶體中都佔據一定的儲存空間,每個對象都有一份屬於自己的單獨的成員變數,所有的對象公用類的成員方法,方法在整個記憶體中只有一份,類本身在記憶體中佔據一份儲存空間,類的方法儲存於此。
每個對象內部都預設有一個isa指標指向這個對象所使用的類。
[p eat];表示給p所指向的對象發送一條eat訊息,調用對象的eat方法,此時對象會順著內部的isa指標找到儲存於類中的方法,執行。
isa是對象中的隱藏指標,指向建立這個對象的類。
(三)類的聲明和實現
1)類的聲明:
這裡聲明了一個Person類,這個類擁有一個@public修飾的屬性(成員變數),以及一個對象方法put。
2)類的實現:類的聲明可以理解為類中的方法的實現
3)類的調用:在主函數首先建立了一個Person類型的對象(先調用alloc分配儲存空間,後調用init方法初始化為0),並定義了一個Person類型的指標指向建立的這個對象,之後初始化對象成員變數_age的值為20,然後調用了對象的put方法,列印輸出。
4)練習,建立一個Person類。
類的聲明:
類的實現如下:
類的調用如下:
(四)常見錯誤
(1)@interface @end和@implementation @end不能嵌套包含
(2)只有類的聲明沒有類的實現
(3)漏寫@end
(4)兩個類的聲明嵌套(可以把順序打亂)
(5)成員變數沒有寫在{}裡
(6)方法的聲明寫在了{}裡面
(7)在聲明時對類的成員變數進行初始化,請注意成員變數不能脫離對象而獨立存在
(8)方法無法像函數那樣的調用
(9)成員變數和方法不能用static等關鍵字修飾,不要和c語言混淆
(10)類的實現可以寫在mian函數後面,在使用之前只要有聲明就可以
七、OC對象與函數
OC對象與函數有著本質的區別:
(1)方法的實現只能寫在@implementation··@end中,對象方法的聲明只能寫在@interface···@end中間
(2)對象方法都以-號開頭,類方法都以+號開頭
(3)對象方法只能由對象來調用,類方法只能由類來調用,不能當做函數一樣調用
(4)函數屬於整個檔案,可以寫在檔案中的任何位置,包括@implementation··@end中,但寫在@interface···@end會無法識別,函數的聲明可以再main函數內部也可以在main函數外部。
(5)對象方法歸類\對象所有
(6)函數調用不依賴與對象
(7)函數內部不能直接通過成員變數名訪問對象的成員變數
八、類和方法的設計
工具類:基本沒有任何的成員變數,裡面的方法基本都是類方法。
注意:在對象方法中可以調用類方法。
需求:設計一個工具類:一個計算機類,要求(1)返回π,(2)計算兩個整數的和,(3)計算某個整數的平方。
類的聲明部分
類的實現部分
測試程式:
Objective-C-基礎知識