OC @protocol(声明协议 )
2017-05-24 17:10
239 查看
@protocol Study; int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[[Student alloc] init] autorelease]; // 注意:OC是弱语法的,对类型要求不严格 // NSString *stu = [[[Student alloc] init] autorelease]; // [stu stringByAbbreviatingWithTildeInPath]; // conformsToProtocol:判断是否遵守了某个协议 if ([stu conformsToProtocol:@protocol(Study)]) { NSLog(@"Student遵守了Study这个协议"); } // respondsToSelector:判断是否实现了某个方法 if ( ![stu respondsToSelector:@selector(test)] ) { NSLog(@"Student没有实现test这个方法"); } } return 0; }
#import <Foundation/Foundation.h> @protocol Study <NSObject> // 默认就是@required - (void)test3; // @required表示必须实现的方法 // 虽然字面上说是必须实现,但是编译器并不强求某个类进行实现 @required - (void)test; - (void)test1; // @optional表示可选(可实现\也可不实现) @optional - (void)test2; @end
#import <Foundation/Foundation.h> @class Button; // <>代表实现某个协议 @protocol ButtonDelegate <NSObject> - (void)onClick:(Button *)btn; @end @interface Button : NSObject // delegate就是按钮的监听器 @property (nonatomic, retain) id<ButtonDelegate> delegate; // 点击按钮 - (void)click; @end
#import "Button.h" @implementation Button - (void)dealloc { [_delegate release]; [super dealloc]; } - (void)click { // 如果_delegate实现了onClick:这个方法 if ( [_delegate respondsToSelector:@selector(onClick:)] ) { // 按钮被点击了,就应该通知监听器.并且告诉监听器哪个按钮被点击了 [_delegate onClick:self]; } else { NSLog(@"监听器并没有实现onClick:方法"); } } @end
调用
#import <Foundation/Foundation.h> #import "Button.h" #import "ButtonListener.h" #import "MyListener.h" int main(int argc, const char * argv[]) { @autoreleasepool { // 初始化一个按钮 Button *button = [[[Button alloc] init] autorelease]; // 初始化一个按钮的监听器 // ButtonListener *listener = [[[ButtonListener alloc] init] autorelease]; MyListener *listener = [[[MyListener alloc] init] autorelease]; // 设置按钮的监听器 button.delegate = listener; NSLog(@"button:%@", button); // 点击按钮 [button click]; Button *button2 = [[[Button alloc] init] autorelease]; button2.delegate = listener; NSLog(@"button2:%@", button2); // 点击button2 [button2 click]; } return 0; }
相关文章推荐
- 第十五篇:OC中 分类,关键字protocol 协议的声明与应用
- OC基础-protocol协议
- OC - 第七章 类的扩展: 类目Category, 延展Extension, 协议Protocol ( 一 )
- OC基础—protocol协议
- OC基础:协议Protocol
- OC之Cagegory, Extension, Protocol协议
- 7、OC Protocol协议
- IOS开发-OC学习-protocol(协议)
- 7、OC Protocol协议
- 黑马程序员——OC—block和protocol协议
- OC 基础之—(NSDate, 类目 Category,协议Protocol, 延展,委托代理)
- OC语言的Block与Protocol(协议)
- OC加强day04-NSString、array、增强for、block、.h中协议的声明
- OC - 第七章 类的扩展: 类目Category, 延展Extension, 协议Protocol ( 二 )
- 黑马程序员——OC语言学习——ARC机制、block代码块、protocol协议、protocol协议的应用
- OC Protocol(协议)
- [置顶] Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
- OC之【@protocol协议】
- OC中的类别Category-协议Protocol-…
- 【Objective-C】OC中协议(Protocol)的基本概念和用法