從 C++ 到 Objective-C(8):繼承(續(xù))參考模板_第1頁
從 C++ 到 Objective-C(8):繼承(續(xù))參考模板_第2頁
從 C++ 到 Objective-C(8):繼承(續(xù))參考模板_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、從 C+ 到 Objective-C(8):繼承(續(xù))作者: DevBean 日期: 2011 年 03 月 22 日發(fā)表評論 (3)查看評論Protocol 對象運行時,協(xié)議就像是類對象,其類型是 Protocol*。例如,conformsToProtocol: 方法就需要接受一個 Protocol* 類型的參數(shù)。protocol 關鍵字不僅用于聲明協(xié)議,還可以用于根據(jù)協(xié)議名返回 Protocol* 對象。Protocol* myProtocol = protocol(協(xié)議名)遠程對象的消息傳遞由于 Objective-C 的動態(tài)機制,遠程對象之間的消息傳遞變得

2、很簡單。所謂遠程對象,是指兩個或多個處于不同程序,甚至不同機器,但是可以通過代理完成同一任務,或者交換信息的對象。正式協(xié)議就是一種可以確保對象提供了這種服務的有效手段。正式協(xié)議還提供了很多額外的關鍵字,可以更好的說明各種參數(shù)。這些關鍵字分別是 in, out, inout, bycopy, byref 和 oneway。這些關鍵字僅對遠程對象有效,并且僅可以在協(xié)議中使用。出了協(xié)議,它們就不被認為是關鍵字。這些關鍵字被插入到在協(xié)議中聲明的方法原型之中,提供它們所修飾的參數(shù)的額外信息。它們可以告知,哪些是輸入?yún)?shù),哪些是輸出參數(shù),哪些使用復制傳值,哪些使用引用傳值,方法是否是同步的等等。以下是詳細

3、說明:· in:參數(shù)是輸入?yún)?shù);· out:參數(shù)是輸出參數(shù);· inout:參數(shù)即是輸入?yún)?shù),又是輸出參數(shù);· bycopy:復制傳值;· byref:引用傳值;· oneway:方法是異步的,也就是函數(shù)調用會立即返回(否則的話,調用者會一直堵塞,直到被調用函數(shù)執(zhí)行完畢,即使被調用者返回值是 void,也同樣會被阻塞)。它的返回值必須是 void(其它返回值是沒有意義的,因為被調用函數(shù)是立即返回,必然無法得到正確的返回值)。例如,下面就是一個返回對象的異步方法:-(oneway void) giveMeAnObjectWhenAvai

4、lable:(bycopy out id *)anObject;默認情況下,參數(shù)都被認為是 inout 的。如果參數(shù)由 const 修飾,則被當做 in 參數(shù)。為參數(shù)選定是 in 還是 out,可以作為一種優(yōu)化手段。參數(shù)默認都是傳引用的,方法都是同步的(也就是不加 oneway)。對于傳值的參數(shù),也就是非指針類型的,out 和 inout 都是沒有意義的,只有 in 是正確的選擇。1 / 3分類創(chuàng)建類的分類 categories,可以將一個很大的類分割成若干小部分。每個分類都是類的一部分,一個類可以使用任意多個分類,但都不可以添加實例數(shù)據(jù)。分類的好處是:· 對于精益求精的開發(fā)者,分類

5、提供了一種劃分方法的機制。對于一個很大的類,它可以將其劃分成不同的角色;· 分類允許分開編譯,也就是說,同一個類也可以進行多人的分工合作;· 如果把分類的聲明放在實現(xiàn)文件(.m)中,那么這個分類就只在文件作用域中可見(雖然這并沒有調用上的限制,如果你知道方法原型,依然可以調用)。這樣的分類可以取一個合適的名字,比如 FooPrivateAPI;· 一個類可以在不同程序中有不同的擴展,而不需要丟棄通用代碼。所有的類都可以被擴展,甚至是 Cocoa 中的類。最后一點尤其重要。很多開發(fā)人員都希望標準類能夠提供一些對他們而言很有用的方法。這并不是一個很困難的問題,使用繼承

6、即可實現(xiàn)。但是,在單繼承的環(huán)境下,這會造成出現(xiàn)很多的子類。僅僅為了一個方法就去繼承顯得有些得不償失。分類就可以很好的解決這個問題:C+Objective-Cclass MyString : public stringpublic: / 統(tǒng)計元音的數(shù)目 int vowelCount(void); int MyString:vowelCount(void).interface NSString (VowelsCounting)/ 注意并沒有使用 -(int) vowelCount; / 統(tǒng)計元音的數(shù)目end implementation NSString (VowelsCoun

7、ting)-(int) vowelCount.end在 C+ 中,這是一個全新的類,可以自由使用。在 Objective-C 中,NSString 是 Cocoa 框架的一個標準類。它是使用分類機制進行的擴展,只能在當前程序中使用。注意此時并沒有新增加類。每一個 NSString 對象都可以從這個擴展獲得統(tǒng)計元音數(shù)目的能力,甚至常量字符串也可以。同時注意,分類不能增加實例數(shù)據(jù),因此沒有花括號塊。分類也可以使匿名的,更適合于 private 的實現(xiàn):interface NSString ()/ 注意并沒有使用 -(int) myPrivateMethod;end implementation NSString ()-(int) myPrivateMethod.end混合使用協(xié)議、分類和子類混合使用協(xié)議、分類和子類的唯一限制在于,你不能同時聲明子類和分類。不過,你可以使用兩步來繞過這一限制:interface Foo1 : SuperClass /okend interface Foo2 (Category) /okend / 下面代碼會有編譯錯誤interface

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論