当我收到NSNotification
时,我是否需要投射notification.object
?假设我知道notification.object
将是MyClass
的一个实例,我会执行以下操作:
MyClass *myClass = notification.object;
此处是否需要任何演员?以上作业与以下内容有何不同:
MyClass *myClass = (MyClass *)notification.object;
答案 0 :(得分:4)
不,这完全是不必要的,并且不会改变程序行为的任何内容。转换仅在编译时发生,对于指针,仅用于向编译器保证您知道对象的类型。
如果您将类型Subclass
的变量设置为返回类型Superclass
的方法的结果,编译器可能会抱怨分配,您知道实际对象是将要回来的是Subclass
类型。在这种情况下,您将转换为子类。如,
MyViewController * vc = (MyViewController *)[someWindow rootViewController];
notification.object
的类型是id
,一个通用对象指针,编译器非常乐意将这样的指针指定给任何其他类型的指针。
答案 1 :(得分:2)
没有。 Objective-C不需要从类型id
转换到另一个对象类型。