iOS程式設計 學習篇(三)

2021-07-03 11:52:58 字數 1821 閱讀 9749

相比之前通過傳送訊息來訪問例項變數,oc提供了更加方便的機制—-點語法。

語法格式:訊息接受者後面加上乙個」.」,在加上例項變數的名字。如果點語法用在複製號左邊,就表示存方法,用在右邊則代表方法。

objective-c中的方法分為例項方法和類方法兩種。

-類方法(class method)的作用通常是建立物件,或者獲取類的某些全域性屬性。類方法不會作用在物件上,也不能訪問例項物件。

-例項方法(instance method)則用來操作類的物件,其中訪問方法就是例項方法,用來設定和獲取物件的例項變數。

###覆蓋方法

子類可以覆蓋(override)父類方法。

***tip:***description方法,想某個nsobject物件傳送description訊息時,可以得到乙個nsstring物件。這個物件包含當前物件的類名和其在記憶體中的位址資訊。

在item.m檔案中覆蓋description方法。

- (nsstring *)description
item類目前只能使用從nsobject類繼承而來的init方法初始化物件。

- (instancetype)initwithitemname:(nsstring *)name

valueindollars:(int)value

serialnumber:(nsstring *)snumber;

- (instancetype)initwithitemname:(nsstring *)name;

tips:每個初始化方法的方法名都會以英文單詞init開頭。

然而在乙個類中,無論他有多少個初始化方法,都必須選的其中的乙個作為指定初始化方法。指定初始化方法要確保物件的每乙個例項變數都處在乙個有效的狀態。(此處的有效是指向初始化的物件傳送訊息時,輸出結果是可預期的)

tips:指定初始化方法的引數通常會和最重要的,最常用的例項變數相對應。

instancetype表示方法返回型別和呼叫方法的物件型別相同。

***tips:***objective-c中,乙個物件不能同時擁有兩個選擇器相同,但是返回型別不同的方法。

id的定義是「指向任意物件的指標「。

區別與instancetype只能表示方法的返回型別,id還可以用來表示變數和方法引數的型別。

- (instancetype)initwithitemname:(nsstring *)name

valueindollars:(int)value

serialnumber:(nsstring *)snumber

return

self;

}

self存在與方法中,是乙個隱式(implicit)區域性變數。編寫方法時不需要宣告self,並且程式會自動為self賦值,指向收到訊息的物件自身。

super的工作機制:當某個物件收到訊息時,系統會先從這個物件開始,查詢和訊息名相同的方法名。如果沒有找到,則會在這個物件的父類中繼續查詢。該查詢會沿著繼承路徑向上,直到找到相應的方法名為止。若找到層次結構的最頂端依舊沒有找到,就會丟擲乙個異常。

tips:向super發訊息,其實是向self發訊息,但是要求系統在查詢方法時跳過當前物件,直接從父類開始查詢。

在初始化方法中應該直接訪問訪問例項變數。

在建立類時,需要先確定指定初始化方法,然後只在指定初始化方法中編寫核心**,其他初始化方法只需呼叫指定初始化方法,並傳入預設值。

初始化方法的簡單規則:

iOS程式設計 學習篇(四)

從語法上看,類方法的宣告和例項方法的宣告不同,差別在於第乙個字元。在返回型別的前面,例項方法使用的是字元 而類方法使用的是字元 tips 標頭檔案宣告順序 例項變數宣告應該寫在最前面,然後是類檔案,接下來是初始化方法,最後是其他方法。這種排序是一種約定。instancetype randomitem...

iOS程式設計 學習篇(五)

當程式執行某個某方法時,會從記憶體中名為棧 stack 的區域分配一塊記憶體空間,這塊空間成為幀 frame 幀負責儲存程式在方法內宣告的變數的值。堆 heap 是指記憶體中的另一塊區域,和棧是分開的。堆包含了大量無序的活動物件,需要通過指標來儲存這些物件在堆中的位址。當應用向某個類傳送alloc訊...

IOS開發學習 OC篇

一 instancetype和id關鍵字的區別 1 instancetype表示方法的返回型別和呼叫方法的物件型別相同。2 在object c引入instancetype之前,初始化方法的返回型別都是id,id的定義是 指向任意物件的指標 相當於c語言中的void 它們的區別是 instancety...