- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

是用来检查对象(包括其祖先)是否实现了指定协议类的方法。

今天遇到一个问题,一个类没有实现protocol中的所有required方法,但是conformsToProtocol依然返回true,这才我很疑惑。于是查了资料并写了以下demo测试下。

//
// main.m
// Test
//
// Created by Norcy on 15/5/7.
// Copyright (c) 2015年 Norcy. All rights reserved.
// #import <Foundation/Foundation.h> @protocol MyProtocol <NSObject>
- (void)f;  //默认是@required
- (void)g;
@end @interface ClassA : NSObject<MyProtocol>
@end
@implementation ClassA
- (void)f{}
@end @interface ClassB : ClassA
@end
@implementation ClassB
- (void)f{}
@end int main(int argc, const char * argv[])
{
@autoreleasepool
{
ClassA *a = [ClassA new];
NSLog(@"%d", [a conformsToProtocol:@protocol(MyProtocol)]);  // ClassB *b = [ClassB new];
NSLog(@"%d", [b conformsToProtocol:@protocol(MyProtocol)]);  //
}
}

程序输出:11

注意:

1.从以上结果可以看出,conformsToProtocol是检查该对象的祖先(注意是祖先而不是父类)和该对象是否实现了协议。即父类符合协议,子类也符合;反之,子类实现了协议父类没有,此时父类不符合协议。

2.protocol中默认方法都是@required而不是@optional

3.虽然ClassA和ClassB中虽然都没有实现g(),但是conformsToProtocol依然返回YES

4.这种情况下,编译器给出警告,而且只是给出父类的警告,子类没有

5.综上,conformsToProtocol这个方法只是判断你在@interface该行后面有没有写上<MyProtocol>,对吗?!

最新文章

  1. 微信公众平台可通过UnionID机制在多公众号间帐号互通
  2. 添加 Android Framework 到 Adt
  3. [转]装完CentOS后,重新开机启动后显示: Initial setup of CentOS Linux 7 (core)
  4. 保持const和non-const函数代码的一致
  5. 从CLR角度来看值类型与引用类型
  6. Failed to load or instantiate
  7. Doubles 分类: POJ 2015-06-12 18:24 11人阅读 评论(0) 收藏
  8. nova分析(8)—— nova-compute
  9. Python Opearte SQLAlchemy Do Something
  10. SQL SERVER时间函数
  11. pip 安装python环境及打包
  12. st_MES_InsertIntoSalaryManage
  13. nagios 完全配置手册
  14. javascript进阶——面向对象特性
  15. Java 序列化Serializable详解(附详细例子)
  16. 洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)
  17. Linux命令之-ps &amp; kill
  18. idea下使用Git基本操作(转载)
  19. HDU 5391 Zball in Tina Town【威尔逊定理】
  20. 查看SQL实际内存占用

热门文章

  1. 算法笔记_075:蓝桥杯练习 最短路(Java)
  2. 算法笔记_064:蓝桥杯练习 操作格子(Java)
  3. MYSQL AND OR的联用
  4. Visual studio之C#的一些常见问题
  5. C++从零实现简单深度神经网络(基于OpenCV)
  6. LaTeX 在编译时出现 File ended while scanning use of \@writefile错误
  7. css hacks
  8. 创建cocos2d-x+lua项目
  9. .NET牛人应该知道些什么?
  10. [iOS]delegate和protocol