addSubview: метод ужасно медленный

Я пытаюсь инициализировать ViewController из другого. Вот код, написанный в моем первом ViewController:

Медиасвиевконтроллер.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 секунды

Шутки в сторону? Больше 4 с, чтобы добавить ноль к mediasVideosController ? Он колеблется между 1с и 5с.

Но если я удалю эту строку:

self.mediasVideosViewController.videosList = self.videosList;

из MediasViewController.m я получаю действительно более короткое время загрузки, например:

добавление nil к mediasVideosViewController.view заняло 0,007613 секунды

Это сводит меня с ума...

у кого-нибудь есть решение?


person Pierre Espenan    schedule 27.06.2011    source источник


Ответы (1)


Когда вы вызываете mediasVideosViewController.view, вы в основном вызываете loadView в первый раз. Вы не просто добавляете подпредставление, вы создаете все представление с помощью этого вызова.

Предположительно, когда вы устанавливаете список видео, вы даете своему методу loadView гораздо больше работы. Это приведет к поведению, которое вы видите.

Короче говоря, проверьте свой метод loadView для подсказок.

РЕДАКТИРОВАТЬ: я заметил, что вы загружаете контроллер представления из файла NIB, в этом случае вы хотите проверить viewDidLoad.

person hundreth    schedule 27.06.2011
comment
Я только что заметил, что вы создаете этот контроллер представления из файла пера, в этом случае проверьте viewDidLoad. - person hundreth; 27.06.2011
comment
Не могли бы вы отредактировать свой ответ, чтобы отразить загрузку файла NIB, чтобы мы могли проголосовать? благодаря. - person Perception; 27.06.2011
comment
Я загружал слишком много изображений в свой mediasVideosViewController. Мой viewDidLoad был слишком тяжелым для загрузки. Спасибо ! И да, было бы неплохо отредактировать ваш ответ;) - person Pierre Espenan; 27.06.2011