IOS-Protocol
来源:互联网 发布:哪些数据库是免费的吗 编辑:程序博客网 时间:2024/06/07 06:07
在iOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中View(UI控件)和Controller(控制器)的解耦
在声明文件(MyBtnDelegate.h文件)中定义
#import <Foundation/Foundation.h>
@class MyBtn;
@protocol MyBtnDelegate <NSObject>
@required
- (void) btnClick: (MyBtn *)sender;
@optional
- (void) btnInit: (MyBtn *)sender;
@end
以上代码可以单独放在一个h文件中,也可以写在相关类的h文件中,视具体情况而定
该Protocol包含两个方法,btnClick:和btnInit:
这里还有两个关键字,@required和@optional,表示如果要实现这个协议,那么btnClick:方法是必须要实现的,btnInit:则是可选的,这两个关键字是在OC 2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现
MyBtnDelegate是Protocol的名称
<NSObject>代表这个Protocol实现了NSObject协议
创建一个普通OC类,在h文件中引入包含Protocol的h文件(或者用@protocol声明这个协议,作用跟@class类似, 建议用这种方式)
// #import "MyBtnDelegate.h"
@protocol MyBtnDelegate;
@interface MyController : NSObject<MyBtnDelegate>
@end
用<>括起来的MyBtnDelegate就是我们创建的Protocol。如果要实现了多个Protocol,可以在尖括号内引入多个Protocol名称,并用逗号隔开即可。例如<MyBtnDelegate,xxxDelegate>
.m文件如下
#import "MyBtnDelegate.h"
@implementation MyController
- (void) btnClick: (MyBtn *)sender{
NSLog(@"按钮被点击了!");
}
@end
由于btnInit:方法是可选的,可以只实现btnClick:
OC的Protocol和Java的接口很类似,如果一些类之间没有继承关系,但是又具备某些相同的行为,可使用Protocol来描述它们的关系,不同的类,可以实现同一个Protocol
最常用的就是委托代理模式,Cocoa框架中大量采用了这种模式实现数据和UI的分离。例如UIView产生的所有事件的处理,都是通过委托的方式交给UIViewController完成。根据约定,框架中后缀为Delegate的都是Protocol,如UIApplicationDelegate,UITableViewDelegate等
一个Protocol本身是可以实现其它Protocol
例如:
@protocol MyDelegate <UIWebViewDelegate>
@end
可以使用conformsToProtocol判断某个类是否实现了某个Protocol
例如:
[obj conformsToProtocol:
@protocol(MyDelegate)];
- IOS-Protocol
- [iOS]delegate和protocol
- [iOS]delegate和protocol
- [iOS]delegate和protocol
- ios 正式协议protocol
- [iOS]delegate和protocol
- iOS -- Protocol Buffers概览
- iOS协议Protocol
- [iOS]delegate和protocol
- [iOS]delegate和protocol
- IOS protocol 的使用
- IOS delegate与protocol
- IOS开发protocol使用
- IOS开发之protocol
- Protocol Buffers for iOS
- ios开发之Protocol
- Protocol 协议总结 - iOS
- iOS protocol 协议
- VB动态创建浏览器控件
- 第十四周项目二
- XML中的颜色配置
- 使用startForeground让android服务前台运行
- linux libxml2的使用
- IOS-Protocol
- 如何将lucene和solr代码导入eclipse
- mybatis blob与clob处理
- 第十四周 oj 利用虚函数-计算图形面积
- 罗索实验室 好多流媒体的知识
- 得了输卵管堵塞能治好吗
- Jumping智能跳绳:回避不必要的智能化
- 在eclipse开发环境中使用Java搭建OAuth Server和OAuth Client
- Visual Studio 2013 class颜色问题