Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否需要对NSN通知上的对象进行强制转换?_Objective C_Object_Casting_Nsnotifications - Fatal编程技术网

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
,是一个通用的对象指针,编译器非常乐意将这样的指针分配给任何其他类型的指针