objective-c - 无法弄清楚这个动态类型的事情

标签 objective-c cocoa dynamic-typing

我正在为面试 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) 的输出为 3NSLog(@"%@",s) 的输出为 3 3

有人可以给我解释一下编译器和运行时系统如何处理所有这些,同时记住我对 Objective-C 和 Cocoa 完全陌生,但对计算机一点也不陌生科学吗?

最佳答案

你的 s 只是一个标准的 C 指针,一个 NSNumber 对象(指向 a 的指针)被分配给它。

NSNumber 以及 NSString 响应 intValue。就是这样。

关于objective-c - 无法弄清楚这个动态类型的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664442/

相关文章:

objective-c - 如何将 CFDataRef 转换为 NSData?

Objective-C 扩展在某些情况下生成 "may not respond warning"

macos - Swift - 让 Mac App 在启动时启动

objective-c - Objective-C 中的动态类型和返回值

objective-c - 如何在运行时检查特定属性及其返回类型?

运行时类型解析的 Java 最佳实践

objective-c - NSStackView 和内容拥抱优先级

ios - removeObjectAtIndex : is removing data from the main array and duplicate array as well

cocoa - 没有数组的 NSArrayController

c++ - 将 NSString* 传递给 C++ 引用参数