我不明白这个if语句是做什么的。为什么以这种方式投射[NSNull null]?
CAAnimation *action = (CAAnimation *)[self actionForLayer:layer forKey:@"backgroundColor"];
if (action != (CAAnimation *)[NSNull null])
{
//Stuff
}
在此gist找到它 感觉就像一个菜鸟!
答案 0 :(得分:0)
如果关键字“backgroundColor”不存在此类动画,则以下语句可能会返回NSNull值(请注意NSNull不是nil)而不是CAAnimation实例。
CAAnimation *action = (CAAnimation *)[self actionForLayer:layer forKey:@"backgroundColor"];
要了解NSNull,请参阅Apple Documentation on NSNull。
因此,如果您比较以下条件将失败,因为在这种情况下返回值NSNull。
if (action != nil)
{
//Stuff
}
因此您的代码应确保它不处理NSNull值。您也可以使用以下代码执行相同的操作。
if (action != nil && [action isKindOfClass:[CAAnimation class]])
{
//Stuff
}
答案 1 :(得分:0)
从您阅读的博客中,您可以像这样阅读
在下面的代码中,我们创建一个名为FancyLabel的UILabel子类,并覆盖actionForLayer:forKey:以便它返回内容键的[CATransition animation]而不是[NSNull null](这是方法正常返回的):
因此,此方法可以返回[NSNull null]
。
然后测试代码是
CAAnimation *action = (CAAnimation *)[NSNull null];
if (action == (CAAnimation *)[NSNull null])
{
NSLog(@"Same Address");
}
这将记录Same Address
所以,如果我尝试删除演员
CAAnimation *action = (CAAnimation *)[NSNull null];
if (action == [NSNull null])
{
NSLog(@"Same Address");
}
它仍会记录Same address
,但会提供警告
因此,由于[NSNull null]是单例,如果两个指针指向它,它必须是==
。
因此,这只是禁止警告
答案 2 :(得分:-1)
Objective-C样式说nil是id类型(和指向对象的指针)的用途。 C风格说NULL是你用于void *的。 C ++风格通常表示你应该使用0。