傻大方


首页 > 潮·科技 > >

苹果|关于ListView控件的兼容性的一则轶事


苹果|关于ListView控件的兼容性的一则轶事

ListView是一个用来呈现数据的 , 非常强大的控件 。 当它处于报告模式(report mode)时 , 它会创建一个列头控件 , 用来显示表格中每一列的标题 。 这个列头控件是ListView控件的属性 , 但是ListView还是十分善意第提供了一个获取其句柄的方法 , 这样你就可以操作列头控件 。
【苹果|关于ListView控件的兼容性的一则轶事】但是 , 有些开发者却滥用了这种善意 。
在原始版本的ListView控件中 , 它没有使用列头控件条目的LPARAM来保存任何数据 。 有些开发者就说 , ”挺好啊 , 你们没有用到这个 , 我就用了哦” 然后就在这个LPARAM中保存一些应用程序的一些私有数据 。
冲突在新版本的ListView中发生了 。 ListView的开发团队决定 , ”我需要在每一个列头条目中保存一些状态数据了 。 幸运的是 , 这个是ListView内部使用的控件 , 我可以保存一些私有数据到列头项目的LPARAM中 , 客户代码应该不会有任何影响 , 太棒了!”
然后应用程序兼容性团队将这两种成分(将数据填充到标题控件中的程序和执行相同操作的列表视图)带到他们的实验室 , 将它们混合 , 然后爆炸就发生了 。
经过一些取证分析 , ListView开发团队弄清楚了发生了什么 , 他们必须设计一种方案来解决这个内部数据结构导致的冲突 。 后来 , 开发团队绞尽脑汁 , 终于将他们用到的私有数据存储在控件的其他地方 , 以便这些客户程序可以继续运行而不会崩溃 。
这个故事的寓意是:即使你改变了一些没人应该依赖的东西 , 也很有可能有人依赖它 。
有人会说 , 你可以直接不考虑兼容性 , 这样应用程序的开发者就不得不修改他们的程序了 。
如果我告诉你 , 如果这个程序是一个被广泛使用的系统工具怎么办?用户只会看到他们之前正常使用功能的工具不能工作了 , 而不会想到底层的原因 。
算了 , 还是继续努力保持兼容性为妙 。
总结我学习到:如果你不希望别人访问你的对象 , 就不要暴露出可以操作对象的句柄 。
看来 , 面向对象编程我还得再学几年 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《The compatibility constraints of even your internal bookkeeping》


    猜你喜欢

  • vivo|小米“发烧”失败,苹果再度登顶销量第一,中国厂商还有未来吗?
  • 苹果|10月手机销量排行出炉:苹果第一,这家国产品牌竟然紧随其后?
  • iPhone|苹果:iPhone重回巅峰的感觉真不错!
  • 苹果|可悲还是可笑?曾在手机行业被视为的段子,现在居然成真了
  • gen.g战队|关于骁龙8 Gen1的功耗表现,高通给出明确回应,小米12稳了!
  • 苹果|苹果竞争对手只有华为?时隔六年重回中国第一,其他品牌没有威胁
  • gen.g战队|骁龙8 Gen1怎么样?CPU看来是躺平了,GPU超过苹果A14
  • Java|联想供应商的角度:司马南关于联想“资不抵债”的谎言必须驳斥
  • 游戏手机|165W快充!老牌国产手机将推出三款旗舰:扯下苹果的“遮羞布”
  • 华为|华为收入持续下滑!

  • 上一篇:一加科技|一加10 Pro亮剑,5000万哈苏三主摄,升级5000mAh大电池

    下一篇:显卡|显卡品牌、型号太多,傻傻分不清楚!产品溢价如何做到心中有数?