木先生

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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")])

 

 

 

posted on 2012-03-13 10:22  一十一王  阅读(1131)  评论(0编辑  收藏  举报