Как ускорить мое приложение для iPad? - PullRequest
0 голосов
/ 25 июня 2010
Application Specific Information:
com.oneorangetree.iphoneexample failed to launch in time 
elapsed total CPU time (seconds): 3.500 (user 1.680, system 1.820), 17% CPU 
elapsed application CPU time (seconds): 0.920, 5% CPU

Когда приложение загружается, оно выполняет ОЧЕНЬ много вещей в viewDidLoad Это займет около 30 секунд. Как я могу поместить это в фоновый поток или что-то еще, чтобы ускорить приложение и предотвратить сбой (потому что загрузка заняла слишком много времени)

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Я использовал NSOperation / NSOperationQueue в прошлом для простой работы с потоками. В частности, NSInvocationOperation позволяет очень просто раскрутить вызов метода, который занимает некоторое время, и NSOperationQueue практически его обрабатывает. Метод, который вы порождаете, должен быть потокобезопасным, но это не особенно сложно сделать. Например, вы можете создать NSOperationQueue в ваших -init или -viewDidLoad методах, а затем добавить NSInvocationOperation в очередь и отправить его в путь.

NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
NSInvocationOperation *lengthyTask = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processAddresses) object:nil];
[opQueue addOperation:lengthyTask];
[lengthyTask release];

Одна из замечательных вещей (особенно на рабочем столе) заключается в том, что на 10.6 (и iOS 4) автоматически используется Grand Central Dispatch.

Несмотря на то, что многопоточность длинной задачи должна сделать ваше приложение более отзывчивым (особенно если вы просматриваете результаты и отображаете их по мере их поступления от многопоточной задачи, возможно, с помощью KVO), было бы полезно реализовать некоторое кэширование. Перезагрузка адресной книги каждый запуск будет очень дорогостоящим, особенно большинство людей не сильно меняют свои адресные книги. Вы можете хранить вычисленные данные в локальном файле или базе данных (Core Data не слишком сложен в использовании, и если он слишком медленный, вы можете использовать SQLite напрямую). Затем при запуске вы можете запустить адресную книгу, сравнивая даты изменения каждой записи с момента последнего запуска вашего приложения и геокодируя новые измененные записи.

1 голос
/ 25 июня 2010

Да, вы можете использовать фоновый поток, однако лучшим подходом будет предварительный расчет (или кеширование) объектов, где это возможно, чтобы время загрузки не было таким длительным.Какого рода вещи выполняет ваш код, который занимает так много времени?

...