我们可以通过TypeCasting将NSString或NSObject转换为NSData

时间:2012-04-19 04:26:34

标签: nsstring nsdata

我下载了一个代码来测试nsobject是否为空

测试是这样的:

-(BOOL) isNotEmpty
{


return !(self == nil
         || [self isKindOfClass:[NSNull class]]
         || ([self respondsToSelector:@selector(length)]
             && [(NSData *)self length] == 0)
         || ([self respondsToSelector:@selector(count)]
             && [(NSArray *)self count] == 0));

};

这部分让我感到困惑:

(NSData *)self length

作者怎么能像那样从NSObject中对NSData进行类型转换?

1 个答案:

答案 0 :(得分:2)

Objective-C运行时并不关心对象的实际类型,无论如何它都会向它发送消息(当然,如果对象没有响应它,事情就会变得很糟糕)。编译器看到“哦,NSArray响应计数,他们声称这是一个NSArray,他们发送-count,所以这一定是好的!”。

那就是说,这非常粗略,并且在检查respondsToSelector之后转换为(id)而不是(NSArray *):更清楚地说“我们不知道这是什么,除了它实现了这个方法”。