OC語言基礎知識

2022-09-11 07:06:11 字數 2581 閱讀 6482

一、物件導向

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)@inte***ce  @end和@implementation  @end不能巢狀包含

(2)只有類的宣告沒有類的實現

(3)漏寫@end

(4)兩個類的宣告巢狀(可以把順序打亂)

(5)成員變數沒有寫在{}裡

(6)方法的宣告寫在了{}裡面

(7)在宣告時對類的成員變數進行初始化,請注意成員變數不能脫離物件而獨立存在

(8)方法無法像函式那樣的呼叫

(9)成員變數和方法不能用static等關鍵字修飾,不要和c語言混淆

(10)類的實現可以寫在mian函式後面,在使用之前只要有宣告就可以

三、oc物件與函式

oc物件與函式有著本質的區別:

(1)方法的實現只能寫在@implementation··@end中,物件方法的宣告只能寫在@inte***ce···@end中間

(2)物件方法都以-號開頭,類方法都以+號開頭

(3)物件方法只能由物件來呼叫,類方法只能由類來呼叫,不能當做函式一樣呼叫

(4)函式屬於整個檔案,可以寫在檔案中的任何位置,包括@implementation··@end中,但寫在@inte***ce···@end會無法識別,函式的宣告可以再main函式內部也可以在main函式外部。

(5)物件方法歸類\物件所有

(6)函式呼叫不依賴與物件

(7)函式內部不能直接通過成員變數名訪問物件的成員變數

四、類和方法的設計

工具類:基本沒有任何的成員變數,裡面的方法基本都是類方法。

注意:在物件方法中可以呼叫類方法。

需求:設計乙個工具類:乙個計算器類,要求(1)返回π,(2)計算兩個整數的和,(3)計算某個整數的平方。

類的宣告部分

類的實現部分

測試程式:

OC 基礎知識

物件導向 封裝 將現實世界中存在的某個客體的屬性與行為繫結在一起,並放置在乙個邏輯單元內.繼承 使子類自動共享父類資料結構和方法,這是類之間的一種關係 多型 指相同的操作或函式 過程可作用於多種型別的物件上並獲得不同的結果 子類能直接繼承父類的方法 還可以重寫父類的方法 子類自己實現行為 子類重寫了...

oc基礎知識(1)

objective c中某個類的規格需要兩個不同的部分 介面和實現。h 標頭檔案。包含類 型別 函式和常量宣告。m 實現檔案,具有此副檔名的檔案可以同時包含oc 和c 又是也稱為原始檔。mm 實現檔案。具有此類副檔名的檔案,出了可以包含oc 和c 以外,還可以包含c 僅當時機飲用oc 中的c 類或功...

OC 基礎知識遺漏點

近期看objective c 基礎教程發現一些之前沒有注意到的東西,現在把這些知識點例舉出來 1.bool objective c中的bool是一種signed char的typedef,它使用了8為的儲存空間。yes定義為1,而no定義為0.oc中並不將bool作為僅能儲存yes或no值的真正的布...