objective-c中提供了很好的类型判断以及反射机制。oc的基础是c语言,所有的对象都使用指针来表示。一个指针的传递过程中可能模糊掉其实际的类型信息。通过类型查询可以帮助解决很多编程过程中的问题。另外,oc中的方法调用是基于消息的。查询某个类型是否包含一个消息的响应也是一个常用的功能。

例如,在进行http网络通信过程中,获得一个NSURLRequest对象。在需要进行头部信息写入的时候需要查询它是否是mutableRequest:

if([req isMemberOfClass:[NSMutableURLRequest class]])

或者

if([req isKindOfClass:[NSMutableURLRequest class]])

这两种写法的区别在于:

1. isMemberOfClass在类型完全相同的情况下返回true。如果instance是类型的子类,则返回false。

2. isKindOfClass包含子类的判断。

 

获取一个NSURLResponse,如果要读取响应头的字段,首先要判断其是否包含了allHeaderFields方法:

if([response responsesToSelector:@selector(allHeaderFields)])

也可以写

if([[response class] instancesRespondToSelect:@selector(allHeaderFields)]).

 

如果需要知道实例是否实现了某个接口,则使用:

if([request conformsToProtocol:NSProtocolFromString(@"NSCopying")])

 

 

 

相关文章:

  • 2021-12-19
  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2022-01-31
  • 2021-12-23
  • 2021-09-16
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-10
  • 2021-10-07
  • 2021-05-20
  • 2021-06-05
  • 2021-09-14
  • 2021-07-26
相关资源
相似解决方案