Objective c 是否需要对NSN通知上的对象进行强制转换?
当我收到Objective c 是否需要对NSN通知上的对象进行强制转换?,objective-c,object,casting,nsnotifications,Objective C,Object,Casting,Nsnotifications,当我收到NSNotification时,我是否需要强制转换notification.object?假设我知道notification.object将是MyClass的一个实例,我将执行以下操作: MyClass *myClass = notification.object; 这里有必要进行铸造吗?上述作业与以下作业有何区别: MyClass *myClass = (MyClass *)notification.object; 不需要。Objective-C不需要从类型id转换到另一个对象类型
NSNotification
时,我是否需要强制转换notification.object
?假设我知道notification.object
将是MyClass
的一个实例,我将执行以下操作:
MyClass *myClass = notification.object;
这里有必要进行铸造吗?上述作业与以下作业有何区别:
MyClass *myClass = (MyClass *)notification.object;
不需要。Objective-C不需要从类型
id
转换到另一个对象类型。不需要,它完全不需要,也不会改变程序的任何行为。强制转换只在编译时发生,在指针的情况下,用于确保编译器知道对象的类型
例如,如果您将子类
类型的变量设置为返回类型超类
的方法的结果,而您知道要返回的实际对象是类型子类
,编译器可能会抱怨赋值。在这种情况下,您将强制转换到子类。例如:
MyViewController * vc = (MyViewController *)[someWindow rootViewController];
notification.object
的类型是id
,是一个通用的对象指针,编译器非常乐意将这样的指针分配给任何其他类型的指针