objective-c語言是物件導向的高階程式語言,因此,它具有物件導向程式設計所具有的一些特性,即:封裝性、繼承性和多型性。
今天介紹一下objective-c中的多型性。
一、什麼是多型
多型:不同物件以自己的方式響應相同的訊息的能力叫做多型。
由於每個類都屬於該類的名字空間,這使得多型稱為可能。類定義中的名字和類定義外的名字並不會衝突。類的例項變數和類方法有如下特點:
方法名是物件介面的一部分。物件收到的訊息的名字就是呼叫的方法的名字。因為不同的物件可以有同名的方法,所以物件必須能理解訊息的含義。同樣的訊息發給不同的物件,導致的操作並不相同。
多型的主要好處就是簡化了程式設計介面。它容許在類和類之間重用一些習慣性的命名,而不用為每乙個新加的函式命名乙個新名字。這樣,程式設計介面就是一些抽象的行為的集合,從而和實現介面的類的區分開來。
objective-c支援方法名的多型,但不支援引數和操作符的多型。
二、在objective-c中如何實現多型
在objective-c中是通過乙個叫做selector的選取器實現的。在objective-c中,selector有兩個意思, 當用在給物件的原始碼訊息時,用來指方法的名字。它也指那個在原始碼編譯後代替方法名的唯一的識別符號。 編譯後的選擇器的型別是sel有同樣名字的方法、也有同樣的選擇器。你可以使用選擇器來呼叫乙個物件的方法。
選取器有以下特點:
* 所有同名的方法擁有同樣的選取器
* 所有的選取器都是不一樣的
(1) sel和@selector
選擇器的型別是 sel。@selector指示符用來引用選擇器,返回型別是sel。
例如:sel responsesel;
responsesel = @selector(loaddatafortableview:);
可以通過字串來得到選取器,例如:
responsesel = nsselectorfromstring(@"loaddatafortableview:");
也可以通過反向轉換,得到方法名,例如:
nsstring *methodname = nsstringfromselector(responsesel);
(2) 方法和選取器
選取器確定的是方法名,而不是方法實現。這是多型性和動態繫結的基礎,它使得向不同類物件傳送相同的訊息成為現實;否則,傳送 訊息和標準c中呼叫方法就沒有區別,也就不可能支援多型性和動態繫結。
另外,同乙個類的同名類方法和例項方法擁有相同的選取器。
(3) 方法返回值和@引數型別
訊息機制通過選取器找到方法的返回值型別和引數型別,因此,動態繫結(例:向id定義的物件傳送訊息)需要同名方法的實現擁有相 同返回值型別和相同的引數型別;否則,執行時可能出現找不到對應方法的錯誤。
有乙個例外,雖然同名灶方法和例項方法擁有相同的選取器,但是它們可以有不同的引數型別和返回值型別。
IOS開發之路 Objective C 復合
今天先補充一下很有必要記住的東西.物件 d,i 整數 u 無符整形 f 浮點 雙字 x,x 二進位制整數 o 八進位制整數 zu size t p 指標 e 浮點 雙字 科學計算 g 浮點 雙字 s c 字串 s pascal字串 c 字元 c unichar lld 64位長整數 long lon...
ios開發Objective C可變引數函式
首先作為乙個coder 很多時候會遇到自己不能解決的問題需要上網查資料,而且不知道我自己水平沒能理解 還是演示demo就有問題,或者大家都沒發現的乙個問題。這裡重新按照自己的理解重新寫乙個使用oc可變引數函式的方法。本人能力有限,如果遇到錯誤或 問題,麻煩大家指出 nsarray actionuse...
iOS開發 Objective C精確的貨幣計算
在ios開發中,和貨幣 計算相關的,需要注意計算精度的問題。即使只是兩位小數,也會出現誤差。使用float型別運算,是完全不夠的。經過一番測試,最後選擇使用系統提供的api的nsdecimalnumber來進行更好的解決。作為乙個對外的庫,鑑於版本延續,我們保留對外的flaot的型別,不改變介面,選...