CIF*_*ter 3 iphone null layout fonts nsstring
所以我使用的时候似乎遇到了一些奇怪的行为NSString
的-sizeWithFont
取决于我是否正在调用它在iPhone模拟器或实际设备的方法调用的家庭.
简单地说,当-sizeWithFont:constrainedToSize:lineBreakMode:
方法调用的接收者是nil
,CGSize
在模拟器上传回的结果是{0, 0}
.但是,在设备上,返回结果与CGSize
我在方法调用中指定的值相同,作为constrainedToSize:
参数.请参阅以下日志语句:
模拟器:
someString: (null)
someStringSize: {0, 0}
Run Code Online (Sandbox Code Playgroud)
设备:
someString: (null)
someStringSize: {185, 3.40282e+38}
Run Code Online (Sandbox Code Playgroud)
模拟器上的行为是我所期望的.并不是说这个问题很难避免,但是1)我有点困惑为什么这个函数系列在模拟器和实际设备上表现不同,以及2)为什么在nil
接收器上调用方法会返回一个特定的,确定的结果?
感谢您提供的任何指示或见解!
编辑:我想我应该提到我正在构建3.1 SDK.
从消息返回到nil的值也可能是有效的:
- 如果方法返回一个对象,则发送给nil的消息返回0(nil)...
- 如果方法返回任何指针类型,任何大小小于或等于sizeof(void*),float,double,long double或long long的整数标量,则发送到nil的消息将返回0.
- 如果该方法返回一个结构,如Mac OS X ABI函数调用指南所定义的那样在寄存器中返回,那么发送给nil的消息将为数据结构中的每个字段返回0.0.其他结构数据类型不会用零填充.
- 如果该方法返回除上述值类型之外的任何内容,则发送到nil的消息的返回值是未定义的.
虽然本文档没有具体谈及iPhone(它是在iPhone SDK发布之前编写的),但请注意第三和第四个要点:如果方法返回结构(例如CGSize
),则行为与平台有关.只有在CPU寄存器中返回的值才会用零填充.我不是iPhone的ARM体系结构的专家,但很可能在iPhone上,返回值sizeWithFont:
不会在寄存器中返回,而不是i386.在这种情况下,在模拟器上运行时,返回的结构将填充零,而在iPhone上运行时,该值将是未定义的.
归档时间: |
|
查看次数: |
547 次 |
最近记录: |