1.1定義協議: 函數
建立一個.h文件 atom
1: _MyProtocolName.h2: @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;
@interface A:NSObject
{
id<Mydelegate> delegate;//聲明一個委託對象,咱們要把事情委託給實現Mydelegate協議的類
}
@property(assign,nonatomic) id<Mydelegate> delegate;
A.m---------------------------------------------
@implementation
-(void)init
{
delegate = B;
}
-(void)FunToOther
{
[delegate Fun];//將消息發送給委託去處理
}
委託對象的實現
B.h---------------------------------------------
#import"A.h"
@interface B:NSObject<MyDelegate>
B.m---------------------------------------------
@implementation
-(void)fun
{
//實現Mydelegate中制定的方法
}
這樣的話A就能夠委託B去作fun這件事情了。