Что происходит после didFinishLaunchingWithOptions?(не могу понять мою задержку производительности) - PullRequest
0 голосов
/ 10 февраля 2012

Я начинаю разработку iOS. Моя цель - уменьшить восприятие времени загрузки во время загрузки приложения. Я добавил флаги «Пуск» и «конец» во всем коде, чтобы попытаться выяснить, где находится задержка при загрузке приложения. Ниже приведен список точек входа и выхода из функций. Мой вопрос:

  • Что происходит после завершения FinishLaunchingWithOptions? Есть ли функция, которую я пропустил?

    1 entry: int main(int, char **)
    2 entry:  -[AppDelegate application:didFinishLaunchingWithOptions:]
    3 entry:   -[AppViewController loadView]
    3 exit :   -[AppViewController loadView]
    3 entry:   -[AppViewController viewDidLoad]
    3 exit :   -[AppViewController viewDidLoad]
    3 entry:   -[AppViewController viewWillAppear:]
    3 exit :   -[AppViewController viewWillAppear:]
    3 entry:   -[AppViewController viewDidAppear:]
    3 exit :   -[AppViewController viewDidAppear:]
    2 exit :  -[AppDelegate application:didFinishLaunchingWithOptions:]
    ? ?????:  //Here i see a VERY LONG PAUSE, possibly loading the view into memory?
              //Anyway to reduce this time here?
    //After this long delay the view actually shows up on the phone.
    

Я фиксирую это, засоряя мой код макросами:

  • - (void)viewWillAppear:(BOOL)animated
    {
        MARKSTART;
        [super viewWillAppear:animated];
        MARKEND;
    }
    

Для тех, кто может быть заинтересован, вот мои макросы. Принято со следующей веб-страницы: http://www.dizzey.com/development/ios/6-useful-objective-c-cocoa-macros/

  • #define MARK      NSLog(@"----%s", __PRETTY_FUNCTION__);
    #define MARKSTART NSLog(@"/===Entry: %s ===\\", __PRETTY_FUNCTION__);
    #define MARKEND   NSLog(@"\\===Exit : %s ===/", __PRETTY_FUNCTION__);
    

Дополнительная информация:

  • У меня есть много кнопок в xib-файле.
  • Элементы управления очищаются, заменяя цвет фона или изображение чем-то
  • PNG Загрузка изображения в действительности происходит в viewDidLoad, дисковый ввод-вывод довольно быстрый
  • Самая поздняя задержка ощущается, когда «вид» фактически загружается в память, но я не уверен.

Какой-нибудь совет о том, кому я могу углубиться в это и найти лучшие способы ускорить загрузку моего приложения или почувствовать, что оно загружается быстрее? Моя самая большая головная боль - ОЧЕНЬ ДЛИННАЯ ПАУЗА ... на iphone 3g (4.2.1 ios) это занимает около 4.2 секунд.

Пожалуйста, сообщите, Box

Дополнительные сведения, основанные на комментариях, формируют поток. Следующий код внутри ViewDidLoad. Это происходит очень быстро, самое большее около 200 мс:

wholeImage = [UIImage imageWithContentsOfFile:@"DefaultSkin.png"];
CGImageRef drawImage;

drawImage = CGImageCreateWithImageInRect(wholeImage.CGImage, CGRectMake(0, 0, 320, 480));
imageMainBackground = [[UIImage imageWithCGImage:drawImage] retain];
CGImageRelease(drawImage);

drawImage = CGImageCreateWithImageInRect(wholeImage.CGImage, CGRectMake(320, 0, 320, 480));
imageAnotherBackground = [[UIImage imageWithCGImage:drawImage] retain];
CGImageRelease(drawImage);

Я продолжаю это, разрезая большое «целое изображение» на кнопки и элементы управления. Также во время ViewDidLoad я назначу их представлениям и подпредставлениям, например:

[self.view setBackgroundColor:[UIColor colorWithPatternImage:[GuiSkinManager sharedSingleton].imageMainBackground]];

Отладка консоли вывода показывает ViewDidLoad с этими выводами NSLog:

2012-02-10 12:43:11.150 App [1714:307] Entry: -[AppViewController viewDidLoad]
2012-02-10 12:43:11.467 App [1714:307] Exit : -[AppViewController viewDidLoad]

Таким образом, настройка и обрезка составляют всего 310 мс при отладке. Но само изображение на самом деле не обрабатывается в это время?

1 Ответ

0 голосов
/ 12 февраля 2012

Похоже, ваша проблема в использовании setBackgroundColor вместо UIImageView. Я думаю, это потому, что setBackgroundColor предназначено для использования небольшого изображения с мозаичным рисунком, а не одного фонового изображения A UIImageView будет супер оптимизирован для рисования одного изображения. Я предполагаю, что это все равно происходит.

Мораль этой истории в том, чтобы использовать инструменты. Это отличный инструмент, который действительно может помочь отследить ряд проблем. Инструмент «Time Profiler» очень помогает при определении того, что занимает процессорное время.

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