我正在整理一个面试问题列表,供面试成为 Cocoa 开发人员的人使用。我是一名程序员,但我从未做过 Objective-C。我偶然发现了一个涉及动态类型的有趣问题。它应该是基本的,我已经尝试过并编译过它,但我仍然不确定它是如何以及为什么工作的。
问题是
当您执行以下操作时,在编译时和运行时会发生什么:
NSString *s = [NSNumber numberWithInt:3];
int i = [s intValue];
在调试器中我得到
i = (int) 3 s = (__NSFCNumber*) 0x383(无效地址)
的输出NSLog(@"%d",i)
是3
, 的输出NSLog(@"%@",s)
是3
。
有人能给我解释一下编译器和运行时系统是如何处理所有这些的,同时还要记住我对 Objective-C 和 Cocoa 完全陌生,但对计算机科学一点也不陌生?