iPhone: как быстрее вызвать пользовательский интерфейс? - PullRequest
0 голосов
/ 26 августа 2010

Я сейчас разрабатываю клиент, похожий на твиттер. Приложение имеет 5 вкладок и все контроллеры табличных представлений.

Это кажется достаточно простым, но время запуска (от нажатия приложения в меню ... до черного экрана + строка состояния ... до интерфейса пользователя) составляет 18 секунд!

Я хочу сократить это как минимум до 5-6 секунд и не хочу иметь заставку. Может кто-нибудь дать мне несколько советов о том, как быстрее вывести интерфейс? Например. Определенные методы, которые я должен использовать / исправить места, где я должен делать вызовы API?

(П.С. сейчас почти 90% моих начальных вызовов API выполняются в методе (id) init {})

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Запуск через отладчик добавляет много времени для запуска. Вы рассчитывали, что он уходит от обычного старта? Похоже, это 15-20 секунд - ваше время при работе через отладчик, поскольку загрузчик убивает приложения, которые запускаются слишком долго.

Кроме того, похоже, что вы делаете вызовы API во время запуска. Это синхронные или асинхронные вызовы API? Возможно, вы захотите выполнять асинхронные вызовы API, поскольку блокировка основного потока пользовательского интерфейса - это большая проблема. Если это синхронные вызовы, простой способ их обойти - это упаковать их одним способом, а затем использовать [NSThread detachNewThreadSelector:toTarget:withObject:].

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

1 голос
/ 26 августа 2010

В одном из моих приложений также есть пять вкладок (но только три контроллера табличного представления), и оно запускается примерно за 6 секунд (как вы пытаетесь достичь). Я заметил, что при запуске загружается только содержимое первой вкладки. Остальные загружаются при первом касании вкладки.

Таким образом, подсказка может заключаться в том, что ваши вкладки будут инициализированы лениво, и я предполагаю, что это еще не так в вашем приложении. Мое приложение имеет 6 файлов XIB, один для главного окна и 5 для содержимого каждой вкладки. Ваш пользовательский интерфейс организован так же?

Предполагая, что ваш пользовательский интерфейс не загружается лениво, вы можете установить точки останова в viewDidLoad: методах содержимого вкладки и посмотреть, кто их загружает так рано.

1 голос
/ 26 августа 2010

Вы должны сначала добавить несколько временных отметок NSLog, чтобы увидеть, где именно вы теряете все это время.Тогда будет понятнее, что можно оптимизировать.

...