【问题标题】:(iphone) what shouldn't be done in background thread with respect to UIView?(iphone) 在后台线程中不应该针对 UIView 做什么?
【发布时间】:2011-04-22 05:11:42
【问题描述】:

我知道并听说大多数与 UI 相关的事情不应该在 main 以外的线程中完成。
我也知道您可以更新 UIView 派生类的非视图相关数据成员(您添加的)。

我想知道以下操作是否可以在后台线程中执行。

  1. 分配 UIView
  2. 使用/不使用(CGRectZero 或仅初始化)框架信息初始化 UIView
  3. 修改 UIView 的 frame/image(UIImageView's) 属性
  4. 修改 NSObject 派生类的图像属性。 (将 UIImage 视为数据)
  5. 使用 subviews 方法访问子视图
  6. 等。是否有关于此问题的明确文档?

谢谢

【问题讨论】:

    标签: iphone uiview background-thread


    【解决方案1】:

    你不应该在后台线程中做任何与视图相关的事情。您列出的所有项目都不应该在后台线程中完成。如果您为 MVC 正确分解应用程序,则视图应仅包含指示其显示方式的项目。所以任何与一个有关的东西都应该只在主线程中。

    您的所有数据操作都应该驻留在您的模型中。它可以根据性能需要进行线程化。请注意发送任何消息以更新 UI 以在主线程上进行数据操作。这包括通知。它们在创建它们的同一线程上发送。所以发送的时候很容易忘记切换到mainThread。

    【讨论】:

    • 感谢您的回答,#4 不是很好吗?将 UIImage* 定义为我的自定义类的成员,并从其他线程设置/获取变量。
    • 是的。抱歉,我将 UIImage 误读为 UIImageView。可以做一些事情,比如读取图像并在后台线程中对其进行一些处理,然后将其传递给主线程进行显示。只需确保您使用的图像处理库也是线程安全的。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2011-08-08
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多