IOS 协议

一、协议

在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法。熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范。也就是说在ObjC中@protocol和其他语言的接口定义是类似的,只是在ObjC中interface关键字已经用于定义类了。

(一)协议注意几点:

1、一个协议可以扩展自另一个协议,例如有的协议是扩展自NSObject,如果需要扩展多个协议中间使用逗号分隔;

2、和其他高级语言中接口不同的是协议中定义的方法不一定是必须实现的,我们可以通过关键字进行@required和@optional进行设置,如果不设置则默认是@required(注意ObjC是弱语法,即使不实现必选方法编译运行也不会报错);

3、协议通过<>进行实现,一个类可以同时实现多个协议,中间通过逗号分隔;

4、协议的实现只能在类的声明上,不能放到类的实现上(也就是说必须写成@interface Person:NSObject<AnimalDelegate>而不能写成@implementation Person<AnimalDelegate>);

5、协议中不能定义属性、成员变量等,只能定义方法;

事实上在ObjC中协议的更多作用是用于约束一个类必须实现某些方法,而从面向对象的角度而言这个类跟接口并不一定存在某种自然关系,可能是两个完全不同意义上的事物,这种模式我们称之为代理模式(Delegation)。在Cocoa框架中大量采用这种模式实现数据和UI的分离,而且基本上所有的协议都是以Delegate结尾。

(二)协议定义:

@protocol  协议名

声明方法

@end

备注:但是我们还看到两个特殊关键字 @required  和 @optional

@required 表示我们用到这个协议的时候必须实现这个协议的方法

@optional 表示我们可选择性实现这些方法,看那个需要我们就去实现,不需要的就不实现

二、协议和委托的关联:

(一) 协议

(1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法

(2)在任何一个类中,只有声明了协议,都可以实现协议里的方法。

(3)协议不是一个类,更没有父类了。

(4)协议里面的方法经常都是一些委托方法

(二) 委托

委托是一种设计模式,是一种设计思想。

委托,故名思议就是托别人办事。打个比方:

张三迫切需要一分工作,但是不知道去哪找。于是他就拜托(委托)李四给帮找一份合适工作,但是托人办事得给被人好处啊,于是张三给李四塞了一个红包(协议),于是李四通过自己关系在某公司找了一份文秘的工作(实现协议里面委托方法),于然后他把文秘这份工作给了张三,张三就找到工作了;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 11:22:17

IOS 协议的相关文章

iOS 协议 protocol

iOS中的协议说白了就是方法的声明,只声明不需要实现,实现的部分由遵守协议方完成. 先看个协议的小例子:这个例子是先给出两个协议,再创建两类人遵守协议. 流氓协议(RogueDelegate.h) #import <Foundation/Foundation.h> /**流氓协议*/ @protocol RogueDelegate <NSObject> @required // 必须实现的方法 /**吃*/ - (void) eat; /**骗*/ - (void) lie; @o

iOS协议、代理、Block和回调、类别

[协议](Protocol) //协议是用来规范接口,实现对象间交互的一种机制.类似于JAVA中的接口,可以模拟. 协议的权限 @optional//可选的 @required//必须的 [代理] 一.代理的概念 [注]代理是实现两个类的对象间通信的一种机制. [委托方]主动方 持有带协议的id指针,可以使用协议. [代理方]被动方 遵从协议,实现方法. 代理回调(反向传值) //当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据.

iOS 协议delegate分六步

第一步:声明协议 在RootView.h中, @protocol 协议名 <基类> 方法 @end @protocol RootViewDelegate <NSObject> - (void)presentToViewController; @end 第二步:声明代理人 在RootView.h中 //必须是assign,为了防止两个对象之间的循环引用 @property (nonatomic, assign)id<RootViewDelegate>rootDelegat

ios协议和委托

在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法 (2)在任何一个类中,只有声明了协议,都可以实现协议里的方法. (3)协议不是一个类,更没有父类了. (3)协议里面的方法经常都是一些委托方法, 二 委托 委托,故名思议就是托别人办事.打个比方: 张三迫切需要一分工作,但是不知道去哪找.于是他就拜托(委托)李四给帮

iOS 协议使用

这整个是一个cell,框框的放的image(有很多图片,可以左右滑动,我用iCarousel做的,这个的代理写在自定义cell类里面的).现在需要点击图片进入下一个页面....现在我点击图片,都会进入到自定义cell类里面的代理里,但是cell类里面,是不让我弹出下一个viewcontroller的..??不然用[self.navigationController pushViewController:show animated:YES];这个方法. 最后用协议实现.当用户点击一个图片的时候,进

ios协议

协议 @protocol 协议名 <NSObject> @end @required 默认类型,必须实现的协议方法 @optional 非必要实现协议方法 oc是弱语法,即使required也可以不是先,这个是个关键字,标记实现的必要程度 如果一个类遵守了协议,那么这个类的实例对象 id<protocol> 对象1 = 实现了这个协议的对象2: 对象1 必须指向实现了protocol的对象2,否则将不能够成功 我的理解,对象一的消息方法列中拥有协议方法(method),所以能发送协

iOS 协议使用(二)

ShowViewController在PopViewController拿值.注意设置代理(委托)?就像,我没有委拖你替我办事,你去银行,或者去政府替我办事,人家当然不会处理你 (1)PopViewController.h #import <UIKit/UIKit.h> //定义协议 @protocol popNextDeleage <NSObject]]]]> -(void)passPopReport:(NSString*)string; @end @interface PopV

ios 协议(delegate)使用过程中遇到assign attribute must be unsafeunretained

今天在使用协议的过程中,偶然发现这样使用 @interface AppDelegate (){ id<ChatDelegate> testdelegate; } @property (nonatomic , assign) id<ChatDelegate> testdelegate; @end @implementation AppDelegate @synthesize testdelegate; 会报错: Existing instance variable 'delegate

iOS 协议分发

Github:AOMultiproxier.HJProtocolDispatcher 协议实现分发器,能够轻易实现将协议事件分发给多个实现者. 一.AOMultiproxier.h #define AOMultiproxierForProtocol(__protocol__, ...) ((AOMultiproxier <__protocol__> *)[AOMultiproxier multiproxierForProtocol:@protocol(__protocol__) withObj