addSubview: метод ужасно медленный - PullRequest
4 голосов
/ 27 июня 2011

Я пытаюсь инициализировать 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 секунд

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

Но если я уберу эту строку:

self.mediasVideosViewController.videosList = self.videosList;

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

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

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

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

1 Ответ

5 голосов
/ 27 июня 2011

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

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

В двух словах, проверьте ваш метод loadView для подсказок.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...