Mda*_*daG 19 objective-c ios6 xcode4.5
为什么NSIndexPath的row属性是有符号整数?
它能否承担"有效"的负面价值?

编辑
直到今天我设置LLVM来检查符号比较时才考虑这个问题.这使编译器在有indexPath.row <= [someArray count]或类似时发出警告.
WDU*_*DUK 13
使用负值是不明智的,如果你这样做,你会得到疯狂的结果
NSIndexPath* path = [NSIndexPath indexPathForRow:-2 inSection:0];
Run Code Online (Sandbox Code Playgroud)
上面的结果是一段0和一行4294967294(看起来像是NSUInteger我的下流!)安全知道这只发生在UIKit Additions类别中,而不是在NSIndexPath本身内.看看背后的概念NSIndexPath,持有负面价值确实没有意义.所以为什么?
NSIndexPathOS X 的核心对象使用NSUIntegers作为索引,但UIKit Addition使用NSInteger.该类别仅构建在核心对象之上,但使用NSIntegerover NSUInteger不提供任何额外功能.
为什么它以这种方式工作,我不知道.我的猜测(并且我规定猜测),首次启动iOS时它是一个天真的API漏洞.当UITableView在iOS 2中发布时,它使用NSIntegers来表示各种事物(例如numberOfSections).想一想:从概念上讲这没有意义,你不能有负数的部分.现在即使在iOS 6中,它仍然使用NSInteger,所以不要破坏以前的应用程序与表视图的兼容性.
除此之外UITableView,我们还添加了一些内容NSIndexPath,它们与表视图一起用于访问它的行等.因为它们必须一起工作,所以它们需要兼容的类型(在这种情况下NSInteger).
要将类型更改为NSUInteger全面,会破坏很多东西,对于安全的API设计,一切都需要重命名,以便NSInteger和NSUInteger对应方可以安全地并排工作.Apple可能不希望这样麻烦(开发人员也不会这样做),因此他们保留了这些麻烦NSInteger.
| 归档时间: |
|
| 查看次数: |
3353 次 |
| 最近记录: |