我只是CABasicAnimation
为 shadowPath 配置了一个属性,这让我很好奇:
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[注:shadowAnimation 是一个CABasicAnimation
对象,newShadowPath
是一个UIBezierPath
对象]
这行得通,并且在 Xcode 中看不到任何错误/警告。但是,如果我这样写:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
这不会编译,抛出这个警告信息:
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
所以它需要我这样输入:
shadowAnimation.toValue = (__bridge id)test;
为什么会这样?当我仅使用(id)newShadowPath.CGPath时,为什么在初始示例中没有出现相同的错误;? __bridge
不管 Xcode 没有检测到任何问题,将 cast 也放在那里是否正确?还是我错过了这里的区别?