gpt4 book ai didi

iphone - 如何在后台查看 "prepare"?

转载 作者:行者123 更新时间:2023-12-03 20:19:37 27 4
gpt4 key购买 nike

我有两个 View ,第一个是一个简单的 View ,其中包含一些有关用法的介绍,通过单击按钮可以打开主视图。主视图有很多图像和两个自定义的表格,行由文本和图像组成,因此主视图的创建相当慢。分析器显示大部分时间被 imageIO 消耗(decode_mcu、png_read_filter_row、pmap_copy_page 和 decompress_onepass)

我想通过在加载第一个 View 后立即创建主视图来进行优化,当我单击按钮时,它只是将该 View 设置为可见或将该 View 置于前面。

我尝试在第一个 View 的 viewDidLoad 中分配并初始化主视图

- (void)viewDidLoad
{
[super viewDidLoad];
rootVC = [[RootViewController alloc] initWithNibName:@"ViewController" bundle:nil];
rootVC.delegate = self;


}

并在按钮的操作方法中执行此操作

- (IBAction)buttonUp:(id)sender {
[self.view addSubview: rootVC.view];
}

但这不起作用,加载仍然需要很长时间。我怎样才能牺牲一些内存来获得更好的用户体验?

谢谢

狮子座

最佳答案

你应该:

  1. 使用 Instruments 查看代码在哪里花费最多时间,并在那里进行优化。可能不是你想象的那样。

  2. 如果您使用的是 UITableView,请了解如何按需创建 UITableViewCell(而不是预加载大量)并回收实例(而不是重新创建它们)。

  3. 仅当 Instruments 将此视为瓶颈时:尝试在后台队列中加载/解压缩图像,然后在加载后更新主队列上的 UIImageView(或其他内容)。

在 iOS 4.x 或更高版本中,您可以执行以下操作:

NSString *path = ...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
// This is happening in the background thread.
UIImage *image = [UIImage imageWithContentsOfFile:path];
dispatch_async(dispatch_get_main_queue(), ^{
// This is happening on the main thread; all UI updates must happen here.
imageView.image = image;
});
});

附注顺便说一句,UIViewController 不会在创建时加载 View ,而是按需加载。因此,根据上面的代码,表达式 rootVC.view 可能会触发 View 加载。如果您想强制它提前加载,只需将 rootVC.view 放在其他地方即可。

关于iphone - 如何在后台查看 "prepare"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282642/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com