自定义 segued 视图有很多元素慢

Custom segued view with lots of elements slow

当我像这样在 iPad 3 上触发我的 CatalogController 时(在模拟器中它需要不到一秒,但这无关紧要):

- (IBAction)goToCatalog:(id)sender {
    NSLog(@"goToCatalogPre");
    [self presentViewController:[[UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil] instantiateViewControllerWithIdentifier:@"CatalogController"] animated:YES completion:nil];
    NSLog(@"goToCatalogPost");
}

我得到这个结果:

2016-03-23 11:27:07.245 Fashion App[592:78778] goToCatalogPre
2016-03-23 11:27:13.571 Fashion App[592:78778] goToCatalogPost

大概是 6.25 秒。我从头到尾测试了 viewDidLoad,实际上只需要几纳秒。除了那个调用之外没有其他触发。

我的ViewController有这些代表:

@interface CatalogController : CoreController <UICollectionViewDelegate, UICollectionViewDataSource, UISearchBarDelegate, UIPickerViewDelegate, UIPickerViewDataSource>

CoreController 只做一个变量跟踪,所以那里不慢。

任何人都有可能导致这种异常的经验吗?老实说,我可以解构所有元素来追溯它,但我想知道以前是否有人遇到过这个问题,可能是什么原因造成的,或者我可以在哪里追踪它而不是在 viewDidLoad 调用中。

以下是我的情节提要中关于此视图的元素:

我使用了 Time Profiler,它确实发生在引擎盖下。在某个时候它点击了一个 UIButton(占总 运行 时间的 69%),然后在更深的地方它 TBaseFont:CopyLocalizedName(__CFString const*) 并且从那里它分裂成 33% 和22%(和一些剩余部分)进入一些本地化缓存和 TBaseFont::CopyNativeFont() 常量。我想我必须检查所有按钮,看看哪个按钮可能导致此问题。

经过一些追踪,我发现(通过这个答案:)这是一个旧的缺失字体错误。它试图加载 Lucida Grande 的旧变体,它似乎以某种方式停止了缓存,使其崩溃。将字体更正为系统再次修复它。瞬间加载时间只有几毫秒。