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


Резултат от конзолата:

добавянето на нула към mediasVideosViewController.view отне 4,261444 секунди

Сериозно? Повече от 4s за добавяне на нула към mediasVideosController? Той се люлее между 1s и 5s.

Но ако премахна този ред:

self.mediasVideosViewController.videosList = self.videosList;

от MediasViewController.m, получавам наистина по-кратко време за зареждане, като:

добавянето на нула към 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
Току-що забелязах, че създавате този контролер за изглед от nib файл, в такъв случай проверете viewDidLoad. - person hundreth; 27.06.2011
comment
можете ли да редактирате отговора си, за да отразява зареждането на NIB файл, за да можем да гласуваме? Благодаря. - person Perception; 27.06.2011
comment
Изтеглях твърде много изображения в моя mediasVideosViewController. Моят viewDidLoad беше твърде тежък за зареждане. Благодаря ! И да, би било хубаво да редактирате отговора си ;) - person Pierre Espenan; 27.06.2011