我正在为面试 Cocoa 开发人员的人整理一份面试问题列表。我是一名程序员,但我从未做过 Objective-C。我偶然发现了一个interesting question这涉及动态类型。它应该是基本的,我已经尝试过并编译了它,但我仍然不确定它是如何以及为什么工作的。
问题是
What happens at compile time and runtime when you do the following:
NSString *s = [NSNumber numberWithInt:3];
int i = [s intValue];
在调试器中我得到
i = (int) 3 s = (__NSFCNumber*) 0x383 (invalid address)
NSLog(@"%d",i)
的输出为 3
,NSLog(@"%@",s) 的输出为
是 3
3
。
有人可以给我解释一下编译器和运行时系统如何处理所有这些,同时记住我对 Objective-C 和 Cocoa 完全陌生,但对计算机一点也不陌生科学吗?
最佳答案
你的 s 只是一个标准的 C 指针,一个 NSNumber
对象(指向 a 的指针)被分配给它。
NSNumber
以及 NSString
响应 intValue
。就是这样。
关于objective-c - 无法弄清楚这个动态类型的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664442/