protocol 协议

protocol:用来声明方法

1.协议的定义

@protocol 协议名称 <NSObject>

// 方法声明列表....

@end

2.如何遵守协议

1> 类遵守协议

@interface 类名 : 父类名 <协议名称1, 协议名称2>

@end

2> 协议遵守协议

@protocol 协议名称 <其他协议名称1, 其他协议名称2>

@end

3.协议中方法声明的关键字

1> @required (默认)

要求实现,如果没有实现,会发出警告

2> @optional

不要求实现,这样不会有警告

4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名<协议名称> *变量名;

id<协议名称> 变量名;

NSObject<MyProtocol> *obj;

id<MyProtocol> obj2;

如果没有遵守对应的协议,编译器会警告

5.@property中声明的属性也可用做一个遵守协议的限制

@property (nonatomic, strong) 类名<协议名称> *属性名;

@property (nonatomic, strong) id<协议名称> 属性名;

@property (nonatomic, strong) Dog<MyProtocol> *dog;

@property (nonatomic, strong) id<MyProtocol> dog2;

6.协议可用定义在单独.h文件中,也可用定义在某个类中

1> 如果这个协议只用在某个类中,应该把协议定义在该类中

2> 如果这个协议用在很多类中,就应该定义在单独文件中

7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

1> 一般情况下,都是定义在单独文件

2> 定义在原来类中的分类,只要求能看懂语法

#import <Foundation/Foundation.h>

@protocol MyProtocol <NSObject> // 遵守其他协议,就把其他协议名写在间括号< >内

 // 默认需要实现
- (void)test; // 声明方法 // required 需要实现, 不实现只会发出警告
// optional 不需要实现
@required
- (void)test1;
- (void)test2; @optional
- (void)test3; @end /******以上是MyProtocol.h文件*******/ #import <Foundation/Foundation.h>
@protocol MyProtocol; // 可以同时有多个协议 <MtProtocol, MyProtocol2>
@interface Person : NSObject <MyProtocol>
@property (nonatomic, strong) id<MyProtocol> obj; @end
/******以上是Person.h文件*******/ #import <Foundation/Foundation.h>
#import "MyProtocol.h"
@inplementation Person - (void)test
{
}
- (void)test1
{
}
- (void)test2
{
} @end
/******以上是Person.m文件***********/ #import <Foundation/Foundation.h>
#import "MtProtocol.h"
#import "Person.h"
int main()
{   Person *p = [[Person alloc] init];
     return 0;
}

基协议:<NSObject>  默认遵守基协议

Objective-C( protocol协议)的更多相关文章

  1. Objective中的协议(Protocol)

    Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...

  2. ISO 基础之 (十三) protocol 协议

    一 简绍 protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现.这种模式一般称为代理(delegation)模式.通过Protocol定义各种行为,在不同的场景采 ...

  3. 【转】iOS开发-Protocol协议及委托代理(Delegate)传值

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...

  4. protocol(协议)

      可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了   //定义一个名叫MyProtocol的 ...

  5. OC语法10——@protocol协议,

    参考资料:博客 @protocol,协议: OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范. 实现此协议的类里的方法,必须按照此协议里定义的方法规范来. ...

  6. iOS开发-Protocol协议及委托代理(Delegate)传值

    前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...

  7. Tabular DataStream protocol 协议

    Tabular DataStream protocol 协议 Freetds 创建过程 https://wenku.baidu.com/view/2076cbfaaef8941ea76e0576.ht ...

  8. DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析

    DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析 问题背景 最近在工作中遇到了连接外网的交换机在IPv6地址条件下从运营商自动获取的DNS地址与本 ...

  9. SIP (Session Initiation Protocol) 协议

    Session Initiation Protocol 介绍 SIP是VoIP技术最常使用的协议,它是一种应用程序层协议,可与其他应用程序层协议配合使用,以控制Internet上的多媒体通信会话. V ...

随机推荐

  1. scrum3.0

    3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...

  2. Preconditions优雅的检验参数

    Preconditions里面的方法: 1 .checkArgument(boolean) : 功能描述:检查boolean是否为真. 用作方法中检查参数 失败时抛出的异常类型: IllegalArg ...

  3. jenkins解决jenkins内存溢出问题

    在jenkins master-slave配置中,总是出现内存溢出问题,更换了机器设备仍然跑不起来: 问题如下: Status Code: 500 Exception: org.apache.comm ...

  4. Windows10 如何删掉内置的 skype ?

    打开开始菜单,输入“PowerShell”并回车: 运行“Get-AppxPackage -User username”命令( username 请替换成当前实际用户名),此时会显示所有已安装的应用程 ...

  5. swift中editingStyleForRowAtIndexPath的写法

    效果图: 首先要实现这句tableView.setEditing(true, animated: true)才能弹出左侧的小圆圈 然而在oc中tableview删除的写法百度一下很常见但是swift中 ...

  6. [转]SVN客户端解决authorization failed问题

    转载地址:http://blog.csdn.net/patdz/article/details/7669591 1. 创建文件夹 E:\STWSource\STWLibrarySVN 2.在文件夹ST ...

  7. 【转】稍改进过的ListView,很好用哈

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...

  8. [问题2014S09] 解答

    [问题2014S09]  解答 充分性:  先证明对 Jordan 块 \(J_r(1)\) 以及任意的正整数 \(m\), 均有 \(J_r(1)^m\) 相似于 \(J_r(1)\). 设 \(N ...

  9. iphone 3gs 美版,6.1.3+降基带+越狱+解锁。成功分享(转)

    本人参照这个帖子成功把一个白苹果的机器救活了 2014年1月26日 13点 转自:http://bbs.app111.com/thread-510632-1-1.html 时间:2013年5月31日  ...

  10. JavaIO总结

    Java IO流分为字节流和字符流 下面首先介绍一下字节流 /** * 字节流测试 * @author hc * */ public class Test { public static void m ...