Общие новички ошибок многопоточности делают на iPhone

Сочувствие должно автоматически понять, что talk.google.com является Вашим доменом. Вы попытались войти в свой адрес электронной почты и пароль так или иначе?

8
задан RexOnRoids 1 September 2009 в 01:38
поделиться

2 ответа

В этом вопросе есть хорошие ресурсы по многопоточности какао: «Где я могу найти хорошее руководство по iPhone / Цель c многопоточностью? "

Я также настоятельно рекомендую прочитать новое Руководство по программированию параллелизма (, однако, игнорируйте блоки и очереди отправки, поскольку Grand Central Dispatch еще не доступен для iPhone OS iOS 4.0 только добавлены блоки и GCD), потому что он дает веские основания для использования таких структур, как NSOperation и NSOperationQueue в качестве альтернатива созданным вручную потокам. Для получения информации о потоках, созданных вручную, обратитесь к Руководство по программированию потоков .

Как упоминает RC, единственный самый большой источник сбоев с многопоточными приложениями Какао - одновременный доступ к общему ресурсу. Директива @synchronized не самая быстрая, как указал Колин Уиллер , поэтому вы можете использовать NSLock для защиты доступа к вашим общим ресурсам. Однако любая блокировка может быть дорогостоящей, поэтому я Я переводил свои приложения на использование одинарных NSOperationQueues для доступа к этим ресурсам. Повышение производительности было значительным.

Другая проблема, связанная с Cocoa и многопоточностью, связана с обновлениями пользовательского интерфейса. Все обновления пользовательского интерфейса в Какао должны выполняться в основном потоке, иначе может возникнуть нестабильность. Если у вас есть фоновый поток, выполняющий вычисления, обязательно заключите любой метод, обновляющий пользовательский интерфейс, в вызов метода -performSelectorOnMainThread: withObject: waitUntilDone: .

15
ответ дан 5 December 2019 в 08:24
поделиться

Вероятно, самая распространенная ошибка новичков (на любом языке) при работе с потоками - это разрешение доступа к изменяемым общим ресурсам без защиты / мьютексов. Вы охраняете такие ресурсы, как:

@synchronized(sharedData)
{
   // modify sharedData safely
}

Вы захотите ограничить объем данных, совместно используемых потоками, и, если они должны быть совместно использованы, предпочитайте неизменяемые объекты, чтобы уменьшить конкуренцию, вызванную синхронизацией.

Управление потоками - еще одно место, где могут возникнуть проблемы. Вот ссылка на документ, посвященный использованию потоков в iPhone.

http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html .

Без кода никто не догадывается, что не так с вашим приложением,

5
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: