iPhone开发 - 我应该投入多远?

时间:2009-08-21 02:03:28

标签: iphone objective-c cocoa-touch casting arguments

如果我有一个传递类型为void *的参数的方法(UIView动画确实是stop方法,必须是一个void指针),或者类型为 id ,我知道参数是一个UIBarButton项,我需要禁用它,[barbuttonitem setEnabled:NO] ;,我应该将参数转换为UIControl,这是我需要能够使用setEnabled(没有警告),或者我应该把它一直扔到UIBarButtonItem?为什么呢?

谢谢!

4 个答案:

答案 0 :(得分:2)

我会说把它投射到UIControl,以防万一实施在某些时候发生变化。我总是使用最合适的接口(不是实现),而UIControl可能就是这样。

答案 1 :(得分:1)

UIBarItem 派生自UIControl,因此投射到UIControl确实不是正确的事情。它的工作原理是因为这两个类恰好都有setEnabled:个方法。

演员表只是另一种形式的文档;它们不会影响运行时发生的事情。如果您期望UIBarItem,那么就这样投射。

答案 2 :(得分:0)

Casting只告诉编译器你期望某个类型的变量:它导致传入的变量发生任何变化。你可以毫无后顾之忧地将它强制转换为UIBarButtonItem。

答案 3 :(得分:0)

如果我正确理解Objective-C,你可以直接在对象上调用setEnabled;你只是不能保证电话会通过。但如果您知道返回的对象是UIBarItem,那么您可以调用它。