addSubview:方法非常慢

时间:2011-06-27 13:04:37

标签: objective-c iphone addsubview

我正在尝试从另一个初始化ViewController。以下是我在第一个ViewController中编写的代码:

MediasViewController.h

#import "MediasVideosViewController.h"

@interface MediasViewController : UIViewController <UIWebViewDelegate>
{
    NSArray*                    videosList; 
    MediasVideosViewController  *mediasVideosViewController;
}

@property (nonatomic, retain) NSArray*  videosList;
@property (nonatomic, retain) MediasVideosViewController*   mediasVideosViewController;


MediasViewController.m:

if (self.mediasVideosViewController == nil)
{
    MediasVideosViewController* mediasVideos = [[MediasVideosViewController alloc] initWithNibName:@"MediasVideosView" bundle:nil];
    self.mediasVideosViewController = mediasVideos;
    self.mediasVideosViewController.videosList = self.videosList;
    [mediasVideos release];
}

NSDate *start = [NSDate date];
[mediasVideosViewController.view addSubview:nil];
NSLog(@"adding nil to mediasVideosViewController.view took %f seconds", [[NSDate date] timeIntervalSinceDate:start]);


控制台结果:

  

将nil添加到   mediasVideosViewController.view拍摄   4.261444秒

真的?将{nil}添加到mediasVideosController以上的时间超过4?它在1到5秒之间摆动。

但如果我删除这一行:

self.mediasVideosViewController.videosList = self.videosList;
从MediasViewController.m

,我得到一个非常短的加载时间,如:

  

将nil添加到   mediasVideosViewController.view拍摄   0.007613秒

这让我发疯了......

有没有人有解决方案?

1 个答案:

答案 0 :(得分:5)

当您调用mediasVideosViewController.view时,您基本上是第一次调用loadView。您不只是添加子视图,而是使用该调用创建整个视图。

据推测,当你设置视频列表时,你给loadView方法做了很多工作。这将导致您看到的行为。

简而言之,请查看loadView方法以获取线索。

编辑:我注意到你正在从NIB文件加载视图控制器,在这种情况下你要检查viewDidLoad。