【问题标题】:Hindrances of having many UIView in a single UIViewController [closed]在单个 UIViewController 中有许多 UIView 的障碍[关闭]
【发布时间】:2013-09-13 09:34:31
【问题描述】:

一个应用程序可以使用单个 UIViewController 包含多个自定义 UIViews 吗?如果我使用单个 UIViewController 推动这个想法并隐藏并显示我想在单击按钮/菜单时显示的 UIView,我担心我的应用程序会变慢。 这个想法是否可取?请给我一些想法。

这是我对我的项目所做的:

如你所见,我只有一个 UIViewController,我添加了 UIView,它们是 Content、MyPage、News、Schedule、Information 和 Login..

【问题讨论】:

  • @Caleb - “许多”有多少并不重要。单一背景颜色的 1000 个视图与 1000 个视图不同,它拥有大量 RAM 和图像并执行复杂的 drawRect。 .
  • @JasperBlues 我想不出一个真实的案例,其中 1000 个视图只包含背景颜色会有用,并且当 OP 询问自定义视图时,我认为这不是他或她在做。
  • @Caleb 这不是重点。你肯定错过了。 (可能我认为这个问题......或者我有)。但关键是,这取决于视图在做什么。 .我解释这个问题的方式是“让一个 VC 根据菜单点击呈现不同的内容视图是个好主意吗”。 .我的回答解释说不,这不是一个好方法。
  • @JasperBlues 坦率地说,OP 应该更加具体。出于这个原因,我投票决定关闭,因为不清楚。我阅读问题的方式是,OP 正在谈论具有多个(无论这意味着什么)子视图的单个视图,其中一些子视图根据用户操作显示或隐藏。
  • @khatz0406 你能说得更具体些吗?从上面的 cmets 可以看出,很难理解您要达到的目标。

标签: iphone ios objective-c uiview uiviewcontroller


【解决方案1】:

一旦达到几百个,它可能会变慢,但操作子视图是正常的。

有时制作多个视图控制器的屏幕很有用,请参见此处:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

【讨论】:

    【解决方案2】:

    通常,重要的不是您拥有多少视图,而是您对它们做了什么。

    典型的性能瓶颈:

    • 执行大量自定义绘图 (drawRect) 的视图往往是优化的良好候选者。
    • 同样,对 CALayer 或动画的复杂操作也会导致性能瓶颈,需要格外注意。

    。 .虽然经验将帮助您预测可能导致性能问题的原因,但通常最好在您观察到实际问题之前进行优化 - 即基于使用分析工具进行的实际测量。

    结构正确

    您应该构建您的应用程序,以便您拥有:

    • 负责管理窗口主布局的根视图控制器。 (滑动以显示菜单、主要内容区域、标题栏等)。 . .对于典型的应用程序,您可以只使用 UINavigationController(或类似的 UIKit 提供的类)作为根。对于更复杂的东西,你可以自己制作。这称为 UIViewController containment,您可以通过 Google 了解它(或点击其他答案中的链接)。

    • 在根视图控制器中,您可以添加子视图控制器。这些子视图控制器又拥有自己的视图和层次结构。 您应该通过它们的控制器与这些子视图交互,而不是直接与视图交互。 . .这将为您提供更易于维护的代码库,并且符合 MVC 模式的意图。

    总结:

    • 拥有大量子视图不会对性能造成损害。它更多地取决于子视图在做什么。
    • 您的子视图应该由控制器层次结构管理,而不仅仅是一个主视图控制器。这样您就可以减少代码维护问题。

    【讨论】:

    • 除了错误(视图的数量可能成为一个重要问题,这就是表格和集合通过回收最小化单元格数量的原因)之外,这确实没有'不回答问题。
    • a) 对我来说,@khatz0406 似乎在问他是否可以只有一个视图控制器负责隐藏/显示多个视图,这似乎更像是控制器的工作 b) 它只是对另一个答案的详细说明(这是赞成的) - 他还建议遏制。 c)我说的是一般性 - 观看次数的影响小于他们正在做的事情。 . .最重要的一点是a)
    • 你得到了我想问的@JasperBlues ..根据你之前的评论,我理解这是不可取的,因为如果单个 UIView 会做很多功能,应用程序会变慢..due到内存分配..
    • @katz0406 - Walang anuman 削皮。 .注意:与其说是内存,不如说是代码的可维护性。每个“屏幕”(或内容区域)都应该有自己的控制器。 . .控制器充当“模型”(您使用 OO 概念来建模您的问题域)和视图之间的粘合剂 - 这都是关于用户交互的。
    猜你喜欢
    • 2018-04-14
    • 2015-01-07
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多