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是弱语法的,所以不实现,编译器并不会报错。


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