iOS協議、代理、Block和回調、類別

來源:互聯網
上載者:User

標籤:

【協議】(Protocol)

//協議是用來規範介面,實現對象間互動的一種機制。類似於JAVA中的介面,可以類比。

協議的許可權

@optional//可選的

@required//必須的

【代理】

一.代理的概念

【注】代理是實現兩個類的對象間通訊的一種機制。

【委託方】主動方 持有帶協議的id指標,可以使用協議。

【代理方】被動方 遵從協議,實現方法。

代理回調(反向傳值)

//當我們需要完成某個功能模組,但不知道使用功能模組的是哪個對象,通過協議,可以規定接收資料的對象通過哪個方法獲得資料。調用該方法的過程稱為【回調】

【Block】

【注】Block是管理程式中代碼塊的對象

//Block和函數指標很相似,可以記成將函數指標的*改成^

        int (^block)(int, int);

【注】block是一個指向Block對象的指標

//block是一個Block對象指標

        block = ^(int a, int b){

            NSLog(@"這個代碼塊被使用了");

            return a + b;

        };

        //這不是個函數,是一個代碼塊對象

        NSLog(@"%d", block(4, 8));

【注】__block關鍵字,聲明一個變數,使變數在Block的內外都能使用。

【類別】

【問題】有的時候我們使用一個類(官方,第三方,自己建立的)會感歎,如果這個類再有一個什麼什麼樣的方法就更好用了,更適合當前程式。但是我們卻不方便修改原類。

【答】可以使用類別為類增補方法

一.認識類別(Category)

【注】類別是類的升級補丁,可以為類新增成員方法。另外類別也可以對類的方法分類管理。

【注】

1.類別中不能新增成員變數

2.在類別中添加的訊息,就如同添加到原類當中;對象的方法可以使用原類對象的成員變數。

3.使用類別須匯入類別標頭檔。

4.父類類別中的方法,子類也可以用。

【注】

1.如果類別中的方法很少,類別只用於當前檔案,可以直接將類別聲明到當前檔案中。

2.如果類別的實現和類別中方法的調用在同一檔案中,可以省略類別的介面部分

二.匿名類別

【注】類別的【仕途不順】的遠親。

【見CategoryDemo2】

三.前置聲明

【注】編寫程式時,不要在一個類的標頭檔中包含另一個類的標頭檔,以免彼此包含標頭檔發生【交叉包含】。

【注】A類使用B類,應在實現部分包含B類標頭檔。

【注】如果A類介面部分使用到B類名稱,應做B類的前置聲明

@class B;

@class 類名

iOS協議、代理、Block和回調、類別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.