【问题标题】:Should I cut the NSString before I load it to a UILabel?在将 NSString 加载到 UILabel 之前,我应该剪切它吗?
【发布时间】:2011-06-19 15:18:44
【问题描述】:

我有很多很长的 NSString,每个 500 到 1000 个单词。

我也有一些UILabel。 NSStrings 被动态加载到 UILabels。

UILabel 的大小是固定的,最多只能显示 50 - 100 个单词。

因此 80% 的单词将无法显示在屏幕上。

那么,我的问题是,在将 NSStrings 加载到 UILabel 之前,我是否应该从 NSStrings 中删除 80% 的单词?

我的担忧是

  1. 内存使用情况。如果我剪切并将每个 NSString 的 20% 加载到 UILabel,那会为我节省内存吗?

  2. 加载性能。我不知道 iOS 对 80% 的 NSString 的实际情况如何。 iOS 是否仍会绘制(但显然由于 UILabel 的视觉大小有限而无法绘制)或只是巧妙地停止绘制超出视觉区域的任何内容。

谢谢

【问题讨论】:

    标签: iphone nsstring uilabel


    【解决方案1】:

    我怀疑 UILabel 不会费心绘制你看不到的字符串。在任何情况下,它们都不会消耗大量内存,因为它们被绘制到的位图上下文仅与视图边界一样大。它们可能会使用额外的几千字节,但这真的没什么大不了的。请记住,一个像素是 4 个字节。

    在您测量出性能问题之前,不要费心进行复杂的优化。

    【讨论】:

      【解决方案2】:

      您可以选择UILabel,您可以使用single linemultiline 使用lineBreakMode,此模式将决定您的UILabel 的性能。

      您的问题没有直接答案,因为我们看不到苹果是如何实现 UILabel 的。

      如果显示完整的文本不是你的要求,你只能传递20%的字符串,可以认为是优化。

      【讨论】:

        【解决方案3】:

        “过早优化是万恶之源” -唐纳德​​·高德纳

        通过整个事情,然后如果它很慢,那么考虑一下。

        1. 理论上是的,因为 UILabel.text 存储打印在屏幕上的文本。但是,我们不再在具有 16k 内存的机器上运行。请参阅上面的报价。

        2. 我相信 Quartz 会做这个优化。一般情况下,发生在 UIView 边界的 CGRect 之外的绘制不会完成。

        【讨论】:

          【解决方案4】:

          显而易见的问题是,为什么要将字符串传递给 UILabel 而不显示全部?无论哪种方式,它的内存效率都不是很高,因为它将完整数据存储在内存中,而是存储为 tc.提到,对于您正在处理的合理大小长度的字符串,它几乎不会导致太多的内存问题。

          除非您在应用中遇到明显的内存问题,否则我建议您不要使用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-27
            • 2015-07-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-26
            相关资源
            最近更新 更多