Objective-C 協議 簡介 +委託的實現

1.1定義協議: 函數

建立一個.h文件 atom

  1: _MyProtocolName.h
  2: @protocol MyProtocolName <NSObject>

  3: @end 

注:協議中沒有變量; spa

<NSObject>是表明在此聲明的協議是NSObject協議的衍生協議(不是NSObject類); .net

1.2使用協議: code

  1: @interface CustomView:UIView<MyProtocolName> 

表明CustomView遵循咱們制定的這個協議,須要實現協議的方法 對象

1.3用協議修飾變量: get

若是這樣定義一個變量: it

  1:   id<MyProtocolName>myNewVariable;

那麼myNewVaiable是遵循咱們制定的這個MyProtocolName協議的 io

 

若是定義函數時: import

  1: - (void) doSomethingWithThisObject: (id<MyProtocolName>) aObject

那麼這個函數的參數是須要遵循咱們制定的這個MyProtocolName協議的

 

============接下來看下如何利用協議實現委託=========

目的:將A的事情委託給B來作
 步驟1.在A中聲明協議,即要委託出去的事情(方法)。
 步驟2.A中聲明一個委託對象,即要委託給誰去辦,用id<協議名字>委託對象名;
 步驟3.好比想讓B作A的事情,那麼B的interface中要宣佈本身遵循A中制定的那個協議。
 步驟4.A調用委託執行那件事情去.即[delegate fun]

A.h------------------------------------------------

@protocol Mydelegate//協議的聲明

-(void)Fun;

@end

 

@interface A:NSObject

{

   id<Mydelegate> delegate;//聲明一個委託對象,咱們要把事情委託給實現Mydelegate協議的類

}

@property(assign,nonatomic) id<Mydelegate> delegate;

@end

A.m---------------------------------------------

@implementation

-(void)init

{

    delegate = B;

}

-(void)FunToOther

{

    [delegate Fun];//將消息發送給委託去處理

}

@end

 

委託對象的實現

B.h---------------------------------------------

#import"A.h"

@interface B:NSObject<MyDelegate>

@end

B.m---------------------------------------------

@implementation

-(void)fun

{

    //實現Mydelegate中制定的方法

}

@end

這樣的話A就能夠委託B去作fun這件事情了。

相關文章
相關標籤/搜索