советы по отслеживанию периодического зависания пользовательского интерфейса iOS

Я написал огромное приложение для iPad 2 года назад, и теперь я возвращаюсь к нему и обновляю его до iOS5. Это немного грязно, так как это было мое первое большое приложение для iPad.

У него есть шаг «синхронизации», который может длиться несколько минут, и это набор вызовов асинхронных методов, которые идут и извлекают JSON из URL-адреса и помещают их в основные данные. Довольно часто приложение зависает (пользовательский интерфейс не отвечает).

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

Вот один конкретный пример, который может помочь:

enter image description here

Я приостановил выполнение, как только убедился, что оно заморожено. Кажется, что он каждый раз зависает на одной и той же строке - простое задание. Что здесь происходит? Это так расстраивает.

Является ли это причиной доступа к основным данным? Любые указатели будут очень признательны.

РЕДАКТИРОВАТЬ 29 ИЮНЯ 2012 г.

Нажмите здесь, чтобы увидеть исходный код класса, который выполняет все действия по созданию/обновлению/удалению основных объектов данных. Мне просто нужно остановить зависание / сбой в этом приложении. Я знаю, что это беспорядок, это заставляет меня съеживаться тоже. Я написал это 2 года назад, почти не зная объектива-c.Я должен переписать это, но я должен заставить это работать и выбросить из головы через 2 дня. Может ли кто-нибудь дать мне указания на подходы к быстрому обеспечению потокобезопасности? Могу ли я обернуть каждый метод, который обновляет NSManagedObjectContext, в код блока большой центральной диспетчеризации?

6
задан Mike S 29 June 2012 в 05:06
поделиться