【问题标题】:Load a dozen UIView of the same type from a NIB从 NIB 加载十几个相同类型的 UIView
【发布时间】:2013-02-12 17:14:18
【问题描述】:

这可能是一个愚蠢的问题,但我什么也没找到...... 我偶然发现了一段我认为可以优化的代码。

我有一个包含 24 个注释/帖子的视图控制器。 在 view-did-load-process 过程中会调用以下内容:

 for (int i = 1; i <= 24; i++)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PostitView" owner:self options:nil];
    for (UIView *subview in nib)
    {
        if ([subview isKindOfClass:NSClassFromString(@"PostitView")]) 
        {

从笔尖一次又一次地加载 postit 需要很长时间。

我会说,我只是从子视图中复制一份,但它不起作用。那么正确的方法是什么?

谢谢!!! 汤姆

【问题讨论】:

  • 我在做什么没有区别。显然,在使用 NIB 时这是不可能的。
  • 加载视图需要多长时间?
  • 这需要太长时间(在我和性能分析器看来)。如果我必须只做一次就可以了。但我打算扩展这个视图控制器,所以这些 loadFromNibview 可能会经常发生
  • 您是否尝试将其添加到只有 PostitView 的新 xib 中,然后您不必遍历所有视图,

标签: ios performance uiview xib nib


【解决方案1】:

在循环之前,创建一个代表您的笔尖的UINib 对象。在循环内部,让UINib 实例化自己。

UINib *nib = [UINib nibWithNibName:@"PostitView" bundle:nil];
Class viewClass = [PostitView class];
for (int i = 0; i < 24; i++) {
    NSArray *topLevelObjects = [nib instantiateWithOwner:self options:nil];
    for (UIView *subview in topLevelObjects) {
        if ([subview isKindOfClass:viewClass)  {
            ...

【讨论】:

  • instantiateWithOwner ...这就是我要找的。谢谢老兄!
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 2011-02-08
  • 1970-01-01
  • 2011-04-01
  • 2011-03-22
  • 2012-10-13
  • 2011-05-05
  • 2014-09-11
相关资源
最近更新 更多