现在的位置: 首页 > 综合 > 正文

objective-c 编程总结(第二篇)类型判断

2013年03月02日 ⁄ 综合 ⁄ 共 705字 ⁄ 字号 评论关闭

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

 

 

 

抱歉!评论已关闭.