将 `UIView` 添加为子视图最初很慢
Posted
技术标签:
【中文标题】将 `UIView` 添加为子视图最初很慢【英文标题】:Adding a `UIView` as a subview is initially slow 【发布时间】:2013-01-05 22:47:32 【问题描述】:在我名为MainViewController
的UIViewController
中,我引用了另一个名为SubViewController
的UIViewController
。定义如下:
@class SubViewController;
@interface MainViewController : UIViewController <UIScrollViewDelegate>
SubViewController * _subViewController;
在我的MainViewController
的initWithNibName:bundle:
方法中,我初始化我的SubViewController
如下:
#pragma mark - Init
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
if((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]))
_subViewController = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil[;
// Forces the view to load, in an attempt to speed up the adding of the subview.
UIView * view = _subViewController.view;
view.alpha = 1.0f;
return self;
确实调用了SubViewController
的viewDidLoad
方法,并且似乎所有内容都已加载,但是当我将SubViewController
添加为子视图时:
- (IBAction)showButtonPressed:(UIButton *)aButton;
[self.view addSubview:_subViewController.view];
应用程序慢了几秒钟,然后添加了子视图,一切都很好。奇怪的是,当我删除子视图并尝试重新添加它时,没有延迟!
我认为问题是加载问题,但我找不到任何有关如何解决此问题的文档。
谁能解释一下是什么导致了这个速度变慢?谢谢!
【问题讨论】:
几秒钟是真的很长的时间。您可能希望使用 Instruments 来确定发生了什么,而不是只查看视图加载。 我同意,这是 真的很长一段时间。仪器可悲地告诉我什么。有什么特别要找的吗? 在仪器上,运行时间分析器,启动应用程序,您应该会看到一个峰值。停止它,然后在下面的区域中,继续单击左侧毫秒数最高的三角形。最终你应该得到一些可以理解的东西。 【参考方案1】:你的代码不完整!!
我尝试使用您的代码并创建新项目 -ARC- 对我来说毫不拖延 尝试使用 Instruments 来查找发生了什么
【讨论】:
显然SubViewController
的布局中有更多代码。例如,它有一个UIScrollView
,我在UIViews
上添加了一些。我想知道是否其他人也有类似的问题。【参考方案2】:
我从来没有遇到过这样的问题。因为您说如果您不加载第二个视图,它的工作速度会更快。检查以查看 secondViewController 的 viewWillAppear 和 viewDidAppear 中的内容
【讨论】:
以上是关于将 `UIView` 添加为子视图最初很慢的主要内容,如果未能解决你的问题,请参考以下文章
将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置