为什么-sizeWithFont:在代码和调试器中返回不同的结果?

时间:2012-07-23 11:51:15

标签: ios iphone xcode cocoa-touch lldb

这一行:

NSLog(@"%@", NSStringFromCGSize([@"Test" sizeWithFont:((id)[UIFont systemFontOfSize:12.0f])]));

打印出正确的结果:{24, 15}

但是,当我在调试器中执行相同操作时(GDB或LLDB无关紧要),我得到了完全不同的结果:

(gdb) p (CGSize) [@"Test" sizeWithFont:((UIFont*)[UIFont systemFontOfSize:12.0f])]
$1 = {
  width = 0, 
  height = 0
}

在模拟器和设备以及5.1最终SDK和6.0 beta 3 SDK上都会发生这种情况。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,深入挖掘,我发现UIFont对象的动态分配在调试器中失败了:

(gdb) p (CGFloat) [[UIFont systemFontOfSize:12.0f] pointSize]
$3 = 0
(gdb) po [UIFont systemFontOfSize:12.0f]
<UICFFont: 0x8e4b720> font-family: ".Helvetica NeueUI"; font-weight: normal; font-style: normal; font-size: 0px

因此,出于某种原因,在调试器环境中创建的字体对象的字体大小为0.其他属性看起来很好。

我已将此记录为错误:rdar://11934937