Я начинаю разработку 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.
Я фиксирую это, засоряя мой код макросами:
Для тех, кто может быть заинтересован, вот мои макросы. Принято со следующей веб-страницы: 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 мс при отладке. Но само изображение на самом деле не обрабатывается в это время?