我的采访中有这个问题。代码示例:
NSString *str = ...;
NSDate *date = (NSDate *)str;
NSLog(@"%d", [date timeintervalsince1970]);
我理解在第二行date
变量存储先前分配给str
的对象而没有可见的更改(我可以向其发送NSString
条消息,并且应用程序在第三行上掉落,因为NSString
没有方法timeIntervalSince1970
)。
问题是编译器在第二行上执行哪些“隐藏”更改? (记忆和e.t.c)
答案 0 :(得分:2)
它使编译器沉默。你"覆盖"编译器假设某个对象属于某种类型。一旦你进行了类型转换,编译器就会根据它的假设来确定对象是你输入对象的类型。
实际上,对象仍然是类型化之前的类型。 大多数时候,运行时会让你“吃掉你的蛋糕”#34;痛苦......例如无法识别的选择器,崩溃......等等。