OC學習筆記之OC類你好

2021-06-21 21:31:24 字數 2814 閱讀 1576

之前,小橋的mac系統是裝在虛擬機器中的,虛擬機器占用資源太大,想裝在實機上,所以這個星期都在搗鼓,終於完工!

一、關於類

高階語言中似乎都有類的概念,c++中是從c的結構體而來。類是物件導向語言中的核心部分,物件導向的三大特性在類中都有具體表現!比如在c++類中,有封裝,有繼承,多型性有過載!相信oc中也是相似的。

二、oc類

雖然小橋一開始就認為只要是類就差不多,但是當學習oc類的時候還是和想像中的不一樣。因為oc類的語法和c++大不相同,在方法和函式的區別上更是完全不一樣。雖然語法上不同,但本質上還是相似的,都有類的宣告部分和實現部分。

三、oc類的宣告 

宣告乙個oc類是這樣的:

@inte***ce

類名 :

nsobject

//方法在此

的宣告

@end

其中 @inte***ce  前面提到過oc中的關鍵字大部分以@符號開頭,這裡就是。inte***ce關鍵字表示宣告乙個類,後面跟上類名。在上面的**中,如你看到   : nsobject  ,其中的冒號和c++一樣表示的意思是繼承,那麼nsobject就是要繼承的類了。事實上nsobject是oc中所有類的父類,oc中類要能例項化物件必須繼承它。nsobject封裝了類例項化物件的一些方法,比如下面要用到的 (new),宣告的類只有繼承了它,才有了這個方法,才能例項物件。

小橋猜想:如果乙個類不需要例項化物件,比如抽象類,那麼是不是就不用繼承nsobject類呢? 

上面**中的花括號如注釋所言,是類的成員變數的宣告所在地,包括基本資料型別,複雜資料型別(類,結體體等等),不多說。花括號到@end之間又是乙個與c++不同的地方,oc類的方法宣告於此,而c++方法宣告是緊接在成員變數後面的,都在花括號裡面。@end表示類宣告結束,與c++類末尾的分號效果一樣。

下面宣告乙個類:

//

// main.m

// 2

//// created by 葬花橋 on 14-4-22.

//#import //類的宣告

@inte***ce student :nsobject

//方法的宣告

//(void)是返回型別 setstudent_id:是方法名,(char*)是引數型別

- (void)setstudent_id:(char*)student_id;

- (void)student_id;

@end

因為類要繼承父類,所以這裡import一下它的宣告檔案,小橋在類中宣告了三個成員變數,注:oc中的書寫規範,在乙個類的宣告成員變數時要以下劃線打頭。 在方法宣告中有兩個方法,對於學習其它語言的人來說咋一看很奇怪,小橋剛看到也一樣。不管是類中的方法還是一般的函式,都有返回型別,方法名或函式名,引數列表(其中又有引數型別,引數名)三個部分。

這裡也是一樣,開頭的 -(減號)先不說,減號加空格後的()表示的就是返回型別,void毫無疑問是空了,接著就是方法名,這裡是setstuden_id   注:如果這個方法沒有引數就直接以分號結尾了,而沒有一對小括號,這樣寫是錯的                

- (void

)setstudent_id(

);  應該是

- (void

)setstudent_id

;對比第二個方法就好明白了。

有引數就是方法名後面加個冒號接第乙個引數列表,這裡是  

(char

*)student_id    

小括號中的是引數型別,外面是引數名,這也和c++不同,c++是把引數名寫在裡面。

讀者在這裡可能會有和小橋當時一樣的疑問,如果是多個引數呢?

如果還有引數,那麼在前乙個引數名的後面這樣寫

andsetid2:(char*)sutdent_id2 

andsetid2是自定義的,原則是字如其義,完整的就是

- (void

)setstudent_id:(

char

*)student_id 

andsetid2:(char*)sutdent_id2

;此時方法就變成了, 

- (void

)setstudent_id:

andsetid2: 

所以方法宣告中冒號的個數就是引數的個數。以上就是小橋學習oc類中關於宣告部分的知識,下面再看看,oc類的實現:

四、oc類的實現

oc中類的實現和宣告類似,也是由一對關鍵字包含起來,

@implementation類名

@end

這對關鍵

字中間就是類中所宣告的方法的具體**了,如下面:

//

// main.m

// 2

//// created by 葬花橋 on 14-4-22.

//#import //類的宣告

@inte***ce student :nsobject

//方法的宣告

//(void)是返回型別 setstudent_id:是方法名,(char*)是引數型別

- (void)setstudent_id:(char*)student_id;

- (void)student_id;

@end

在set方法中是乙個賦值語句,把引數student_id賦值給下劃線開頭的成員變數,如果成員變數沒有下劃線開頭這裡賦值就會有點麻煩,

stuendt_id   = 

stuendt_id

; 是沒有意義的語句  

當然可以用相當於c++中this指標的 self指標, 

既然蘋果官方這樣寫,我們也沒有理由特立獨行。 

OC學習筆記 OC中的類

1.objc跟c的區別與聯絡 首先 objc是乙個物件導向的語言 封裝 繼承 多型 objc相當於c的乙個超集 即objc允許使用任何c語言 但增加了許多c沒有的特點 bigger easier 2.objc中的類與物件 類由介面 xx.h inte ce 和實現 xx.m implementati...

OC學習筆記之block

一 什麼是block block是oc中的乙個資料型別,但是它很特別,因為它是用來儲存一段 的 可以理解為把一段 賦值給block型別的變數 它和函式有點相似,它可以帶引數,可以有返回值,呼叫方式也一樣。二 定義乙個不帶形參沒有返回值的block main.m block created by 葬花...

OC學習筆記

1 什麼時候用類方法?什麼時候用例項方法?類方法 應該是對整個模型層面的操作,例項方法 是對某單個模型的操作。又如有乙個使用者類,請求附近的使用者,應該寫成類方法,更新當前使用者的資料,應該寫成例項方法。工具類,基本不需要訪問任何成員變數的時候用類方法。主要全域性層面使用,很方便。需要單獨建立某個物...