IOS 開發學習總結objective-c物件導向之——方法

來源:互聯網
上載者:User

IOS 開發學習總結objective-c物件導向之——方法

objective-c 的方法不能獨立存在,所有的方法都必須定義在類裡。方法在邏輯上,要麼屬於類,要麼屬於對象。

方法的所屬性

不難發現,方法在文法上和功能上,方法與函數很相似。其實,方法是由傳統的函數發展而來的。
objective-c 調用函數時的傳參機制和調用方法時的傳參機制是一樣的,都是值傳遞,都是傳入參數的副本。

方法與傳統的函數的顯著不同:

在結構化程式設計語言裡,函數是一等公民。整個程式是由一個一個函數組成;
物件導向的語言裡,類是一等公民。因此在 OC 裡方法不能獨立存在,必須屬於類或者對象。
由於 objective-c 裡的方法不能獨立存在,也不能像函數那樣獨立執行,執行方法時必須使用類或者對象作為調用者。
由上,objective-c 中方法的所屬性主要體現在下面的3個方面:
1. 方法不能獨立定義,只能在類體裡定義。
2. 方法在邏輯上,要麼屬於類,要麼屬於對象。
3. objective-c 裡的方法不能獨立存在,也不能像函數那樣獨立執行,執行方法時必須使用類或者對象作為調用者。

形參個數可變的方法

如果在定義方法時,在最後一個形參名後增加逗號和三點(,…),就表明該形參可以接受多個參數值。
為了在程式中擷取個數可變的形參。需使用如下關鍵字:
- va_list:這是個用於定義指向可變參數列表的指標變數。
- va_start:這是個函數。指定開始處理可變形參的列表,並讓指標變數指向可變形參列表的第一個參數。
- va_end:結束處理可變形參,釋放指標變數。
- va_arg:該函數返回指標當前指向的參數的值,並將指標移動到指向下一個參數。

如下樣本程式:
標頭檔:VarArgs.h

#import @interface VarArgs : NSObject// 定義形參個數可變的方法- (void)test:(NSString *) name, ...;@end

實現檔案:VarArgs.m

#import VarArgs.h@implementation VarArgs- (void)test:(NSString *) name, ...{    // 使用va_list定義一個argList指標變數,該指標變數指向可變參數列表    va_list argList;    // 如果為第一個name參數存在,才需要處理後面的參數    if (name)    {        // 由於name參數並不在可變參數列表中,因此先處理name參數        NSLog(@%@ , name);         // 讓argList指向第一個可變參數列表的第一個參數,開始提取可變參數列表的參數        va_start(argList, name);         // va_arg用於提取argList指標當前指向的參數,並將指標移動到指向下一個參數        // arg變數用於儲存當前擷取的參數,如果該參數不為nil,進入迴圈體        NSString* arg = va_arg(argList, id);        while (arg)        {            // 列印出每一個參數.            NSLog(@%@,arg);            // 再次提取下一個參數,並將指標移動到指向下一個參數            arg = va_arg(argList, id);        }        // 釋放argList指標,結束提取        va_end(argList);    }}@endint main(int argc , char * argv[]){    @autoreleasepool{        VarArgs* va = [[VarArgs alloc] init];        [va test:@瘋狂iOS講義             , @瘋狂Android講義, @瘋狂Ajax講義 , nil];    }}

本質上說,這個可變參數也是個類似數組的結構。最後要指出的是,個數可變的形參只能處於形參列表的最後。即:一個方法中最多隻能有一個長度可變的形參。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.