【发布时间】:2013-05-01 17:12:08
【问题描述】:
if([@"" class] == NSClassFromString(NSStringFromClass([@"" class])))
printf("foo");
else
printf("bar");
iOS 上的输出:foo
OS X 上的输出:条形
为什么这在 OS X 上表现得那么奇怪?
【问题讨论】:
-
您是否尝试过使用调试器或日志记录来确定
NSStringFromClass和NSClassFromString的结果是什么? -
我猜
[@"" class]可以(概念上)有几个不同的值,这取决于 NSString 是否被构造、静态定义等。Cocoa 喜欢为同一个外部类创建多个内部类,并且这些在 iOS 和 OSx 之间可能有所不同。 -
我在 OS X 和 iOS 上都有 'foo'。两个字符串都是
__NSCFConstantString的同一个私有类。并使用NSLog();而不是printf(); -
@Kri: 是的,我已经通过调试器逐步查看了覆盖,将它们存储在变量中时,有趣的是:[@"" class] 和 NSClassFromString(NSStringFromClass([@ "" class])) 在两个操作系统上都显示为 __NSCFConstantString,因此它们在 OS X 上看起来也具有相同的值。
-
@Tom:嗯,我什至将代码复制到了一个全新的空测试项目中,这是我刚刚从 OS X Foundation 命令行工具模板创建的,但我仍然得到 bar。我已经尝试过调试和发布配置、32 位和 64 位以及不同的基础 SDK 和目标平台,但它总是适用于 OS X。你能告诉我你有 foo 的设置吗?
标签: objective-c cocoa operating-system