



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、從C+至U Objective-C(4):類和對象(續(xù))作者:?日期:2011 年03月19日?(9)方法Objective-C 中的方法與 C+的函數(shù)在語法方面風格迥異。下面,我們就來講述Objective-C的方法。原型、調(diào)用、實例方法和類方法? 以-開頭的是實例方法(多數(shù)情況下都應該是實例方法);以+開頭的是類方法(相當于 C+ 里面的 static函數(shù))。Objective-C 的方法都是 public 的;?返回值和參數(shù)的類型都需要用小括號括起來;?參數(shù)之間使用冒號:分隔;?參數(shù)可以與一個標簽label關聯(lián)起來,所謂標簽,就是在 :之前的一個名字。標簽被認為是方法名字的一部分。這使得
2、方法比函數(shù)更易讀。事實上,我們應該始終使 用標簽。注意,第一個參數(shù)沒有標簽,通常它的標簽就是指的方法名;?方法名可以與屬性名相同,這使 getter方法變得很簡單。C+/原型void Array : insertObject (void * anObject, unsigned int atIndex );/ shelf 是Array 類的一個實例,book 是一個對象shelf. insertObject (book, 2);Objective-C (不帶label ,即直接從 C+翻譯來)/方法原型/ 方法名字是insertObject:/這里的冒號:用來分隔參數(shù),成為方法名的一部分(注意
3、,這不同于C+的域指示符::)-(void ) insertObject :( id ) anObject :( unsigned int ) index/ shelf 是Array 類的一個實例,book是一個對象shelf insertObject: book : 2;Objective-C (帶有 label)/方法原型?!癷ndex”有一個標簽“atIndex ”方法名為insertObject:atIndex:這樣的話,調(diào)用語句就很容易閱讀了-(void ) insertObject:(id ) anObject atIndex:(unsigned int ) index/ shel
4、f是 Arrayshelf insertObject類的一個實例,book:book : 2;是一個對象shelf insertObject:book atIndex/錯誤!:2 ; / 正確注意,方括號語法不應該讀作調(diào)用shelf對象的insertobject方法”,而應該是 向shelf對象發(fā)送一個insertobject消息”。這是Objective-C 的實現(xiàn)方式。你可以向任何對象發(fā)送任何消息。 如果目標對象不能處理這個消息,它就會將消息忽略(這會引發(fā)一個異常,但不會終止程序)。如果接收到一個消息,目標對象能夠處理,那么,目標對象就會調(diào)用相應的方法。如果編譯器能夠知道目標對象沒有匹配的
5、方法,那么編譯器就會發(fā)出一個警告。鑒于Objective-C 的前向機制,這并不會作為一個錯誤。如果目標對象是id類型,那么在編譯期就不會有警告,但是運行期可能會有潛在的錯誤。this , self 和 super一個消息有兩個特殊的目標對象:self和super。self指當前對象(類似 C+的this) , super指父對象。Objective-C 里面沒有this指針,取而代之的是 self。注意,self不是一個關鍵字。實際上,它是每個消息接收時的隱藏參數(shù),其值就是當前對象。它的值可以被改變,這一點不同于C+的this指針。然而,這一點僅僅在構(gòu)造函數(shù)中有用。在方法中訪問實例變量同C+
6、 一樣,Objective-C在方法中也可以訪問當前對象的實例變量。不同之處在于,C+需要使用 this- ,而 Objective-C 使用的是 self-。C+class Fooint x ;inty ;void f ( void );;void Foo : f (void )x= 1;int y ; / 隱藏 this-yy= 2; 使用局部變量ythis -y = 3; / 顯式使用成員變量 Objective-Cinterface Foo : NSObjectint x;int y;-(void ) f;endimplementation Foo-(void ) fx= 1;int
7、y; / 隱藏 this-yy= 2; /使用局部變量yself - y = 3; /顯式使用成員變量end原型的id、簽名和重載函數(shù)就是一段能夠被引用的代碼, 例如使用函數(shù)指針。 一般的, 方法名會作為引用方法的唯一id ,但是,這就需要小心有重載的情況。 C+ 和 Objective-C 使用截然不同的兩種方式去區(qū)分:前 者使用參數(shù)類型,后者使用參數(shù)標簽。在 C+ 中,只要函數(shù)具有不同的參數(shù)類型,它們就可以具有相同的名字。 const 也可以作為一 種重載依據(jù)。C+int f ( int ) ;int f ( float ) ; / 允許, float 和 int 是不同類型 class
8、Foo public :int g ( int ) ;intg ( float); / 允許, float和 int是不同類型intg ( float) const ;/ 允許,const可以作為重載依據(jù);class Barpublic :int g ( int ) ; / 允許,我們使用的是Bar: ,而不是 Foo:在 Objective-C 中,所有的函數(shù)都是普通的 C 函數(shù),不能被重載(除非指定使用 C99 標準)。方法則具有不同的語法,重載的依據(jù)是label 。Objective-Cint f ( int ) ;int f ( float) ; /interfaceFoo錯誤! C
9、函數(shù)不允許重載NSObject-(intg :(int )x;-(intg :(floatx;/ 錯誤!類型不同不作為重載依據(jù),同上一個沒有區(qū)別類型不同不作為重載依據(jù),同上一個沒有區(qū)別-(-(intintg :(g :(intint:(:(int ) y;float) y;/正確:兩個匿名 label錯誤:同上一個沒有區(qū)別-(intg :(intx andY :(int )y;/-(intg :(intx andY :(floaty;/-(intg :(intx andAlsoY:( inty;正確:第二個label 是 “andY”錯誤:同上一個沒有區(qū)別/ 正確:第二個label 是 “andAlsoY基于endlabel 的重載可以很明白地解釋方法的名字,例如:interfaceFooNSObject TOC o 1-5 h z /方法名“g”(int)g;/方法名“g: ”(int)g:(float)x;/方法名“g: ”(int)g:(float)x:( float) y;/方法名“g:andY:”(int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站服務合同范例
- 倉儲物流物料訂購合同范例
- 三棟鋪面出租合同范本
- 農(nóng)資商品購銷合同范本
- 環(huán)保沙發(fā)采購合同范本
- 合同范例范例租車
- 企業(yè)購買葡萄合同范本
- 口腔護士用工合同范例
- 卡制作合同范例
- 合同范本自助
- 2025年江蘇揚州市儀征市眾鑫建設開發(fā)有限公司招聘筆試參考題庫附帶答案詳解
- 大象版四年級下冊《科學》全套教學課件
- 安徽毛坦廠實驗中學2025屆高三11月期中考試英語+答案
- 期末考試質(zhì)量分析教學成績匯報模板
- 學校招生預約與咨詢服務
- 部編高教版2023·職業(yè)模塊 中職語文 2.《寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘》 課件
- 安全環(huán)保職業(yè)健康法律法規(guī)清單2024年
- 2023年高考語文全國乙卷《長出一地的好蕎麥》解析
- 醫(yī)療、預防、保健機構(gòu)醫(yī)師聘用證明表(共1頁)
- 清鈴撳針介紹
- 東方要略(1-完整版)
評論
0/150
提交評論