2017-01-24 78 views
-1

我在我的目标c应用程序中有一个xib。但是,当我试图加载这个viewController,这花了大约1秒,这是一种不好的感觉...如何快速将xib视图加载到我的viewController中?

我使用自定义字体,但我已经正确地将它添加到我的.plist 我的customView类是由文件的所有者添加并与插座连接。

我的代码是:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 

    if (self) 
    { 
     [email protected]"MyCustomView"; 

     [self addSubview: 
     [[[NSBundle mainBundle] loadNibNamed:nibname 
             owner:self 
            options:nil] objectAtIndex:0]]; 


    } 
    return self; 
} 

然后,我在加载的viewController这是这样的:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    ... 
    MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
    [self.view addSubview:myview]; 
    ... 
} 

我是否正确加载该自定义视图?

我该如何做这个加载过程更快?

编辑1然后校正的读取亚光评论:

[self.view addSubview:myview]; 

提供:最后错误代码:[self.view MyView的];

+0

这不是你真正的代码。 '[self.view myview]'这行没有任何意义。 – matt

+0

¿?我真的把它添加到uiscrollView,但为了做更简单的这个例子,我把它添加到视图。发生什么事?这也是工作.... – user3745888

+0

你没有添加任何东西。如果你打算说'addSubview:'你应该说_say_它。提供_real_代码,而不仅仅是一些你写意的东西。 _复制和粘贴从一个真正的测试项目。 – matt

回答

2

根据你所说的,我无法重现问题。我添加定时到您的viewDidAppear代码:

NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 
MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
[self.view addSubview:myview]; 
NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 

而这里的输出:

2017-01-24 12:47:18.812 NibLoadTest[12087:135969] 506983638.811982 
2017-01-24 12:47:18.814 NibLoadTest[12087:135969] 506983638.814367 

也就是说 1秒的延迟!这是一秒的千分之一秒

因此,这个问题是虚幻的,或者是由其他你没有显示的东西造成的。如果你想测量东西需要多长时间,测量它。理想情况下,使用仪器;那是什么。它会告诉什么是需要时间和为什么。不要猜测。

+1

把这段代码放在'viewDidAppear'中似乎也有风险,因为这可能会在这个视图控制器的生命周期中多次调用,从而导致一次又一次地添加相同的视图。 – matt

+0

非常感谢! @matt这是正确的答案。我已经将我的代码更改为viewDidLoad函数,并且这个工作正确无误。问题在于你的评论,在viewDidAppear中被多次调用。快乐的编码!谢谢! – user3745888

相关问题