objective-c - addSubview:方法非常慢

标签 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]);


控制台结果:

adding nil to mediasVideosViewController.view took 4.261444 seconds

是认真的吗?将 nil 添加到 mediasVideosController 超过 4 秒?它在 1 秒和 5 秒之间摆动。

但是如果我删除这一行:

self.mediasVideosViewController.videosList = self.videosList;

在 MediasViewController.m 中,我的加载时间真的很短,例如:

adding nil to mediasVideosViewController.view took 0.007613 seconds

这让我发疯...

有没有人有解决办法?

最佳答案

当您调用 mediasVideosViewController.view 时,您基本上是第一次调用 loadView。您不只是添加 subview ,而是通过该调用创建整个 View 。

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

简而言之,检查您的 loadView 方法以获取线索。

编辑:我注意到您正在从 NIB 文件加载 View Controller ,在这种情况下您想要检查 viewDidLoad。

关于objective-c - addSubview:方法非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493261/

相关文章:

iphone - iOS 应用错误 : I screwed up somewhere in date calculation

iOS UIImage mask 边框

iPhone - 无法使用硬按钮调节音量

ios - 父 UIView 不包含/剪辑 subview

ios - 如何将 mpMoviePlayerController 方向锁定为横向模式?

ios - 如何在 Objective-C 中将字符串插入到 sqlite?

ios - 如何在 NSUserDefaults 中存储自定义对象

iphone - 从越狱的iPhone上的控制台打开wifi/蓝牙/网络共享

ios - addSubview 在 "for loop"中并带有计数

iphone - subView从屏幕底部向上滑动