类型转换在Objective C中实际做了什么?

时间:2015-02-27 11:59:09

标签: objective-c type-conversion

我的采访中有这个问题。代码示例:

NSString *str = ...;
NSDate *date = (NSDate *)str;
NSLog(@"%d", [date timeintervalsince1970]);

我理解在第二行date变量存储先前分配给str的对象而没有可见的更改(我可以向其发送NSString条消息,并且应用程序在第三行上掉落,因为NSString没有方法timeIntervalSince1970)。

问题是编译器在第二行上执行哪些“隐藏”更改? (记忆和e.t.c)

1 个答案:

答案 0 :(得分:2)

它使编译器沉默。你"覆盖"编译器假设某个对象属于某种类型。一旦你进行了类型转换,编译器就会根据它的假设来确定对象是你输入对象的类型。

实际上,对象仍然是类型化之前的类型。 大多数时候,运行时会让你“吃掉你的蛋糕”#34;痛苦......例如无法识别的选择器,崩溃......等等。