protocol協議

oc中的協議很像Java中的接口,定義一組約定俗成的規範,讓其他類來實現,而protocol主要是爲了監視這個對象的活動信息,這樣看起來到像是數據庫端的觸發器了,一旦滿足某個規則,我就執行某個事件。

#import <Foundation/Foundation.h>

@class MessageCenter;

//定義一個消息中心的協議

@protocol MessageDelegate <NSObject>

-(void)sendMessage:(MessageCenter *) center;

@required //必須實現

-(void)sum;

@optional //可實現也可不實現

-(void)min;

@end


@interface MessageCenter :NSObject

@property (nonatomic,retain)id<MessageDelegate> delegate;

-(void)send;

@end


----------------------------------------------------------------------

#import "MessageCenter.h"

@implementation MessageCenter

-(void)send{

//判斷某個協議是否存在某個方法

   if([_delegaterespondsToSelector:@selector(sendMessage:)]){

        [_delegatesendMessage:self];

    }

}

- (void)dealloc

{

    [_delegate release];

    [superdealloc];

}

@end





#import <Foundation/Foundation.h>

@protocolMessageDelegate;

@interface SmsListener :NSObject <MessageDelegate>

@end

#import "SmsListener.h"

#import "MessageCenter.h"

@implementation SmsListener

-(void)sendMessage:(MessageCenter *)center{

   NSLog(@"正在發送消%@",center);

}

@end


#import <Foundation/Foundation.h>

#import "MessageCenter.h"

#import "SmsListener.h"

int main(int argc,constchar * argv[])

{

    @autoreleasepool {        

        MessageCenter *m=[[[MessageCenteralloc]init]autorelease];        

       SmsListener *listener=[[[SmsListeneralloc]init]autorelease];      

        m.delegate=listener;        

        [m send];

 SmsListener *sm=[[[SmsListeneralloc]init ]autorelease];

       if([smconformsToProtocol:@protocol(MessageDelegate)]){ //判斷是否存在某個協議

           NSLog(@"存在協議");

        }


    }

   return0;

}

 

總結:

1.判斷協議是否存在某個方法:協議名稱 respondsToSelector:@selector(方法名稱)

2.判斷對象是否存在某個協議:對象名稱 conformsToProtocol:@protocol(協議名稱)

3.協議中的方法前面如果加了@required,必須實現,如果加了@optional可實現也可不實現,默認是@required,但是因爲OC是弱語法的,所以不實現,編譯器並不會報錯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章