Когда мне нужно беспокоиться о безопасности потоков в приложении для iOS? - PullRequest
7 голосов
/ 18 августа 2011

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

Ответы [ 3 ]

9 голосов
/ 18 августа 2011

Руководство по параллельному программированию хорошо.Вот несколько очень важных вещей, о которых следует помнить.

- Вы должны обновлять пользовательский интерфейс только из основного потока.Это может получить вас тонкими способами ...

- NSNotifications будут получены в потоке, из которого они запускаются.Поэтому, если вы запускаете поток и подписываетесь на NSNotification для запуска действия пользовательского интерфейса, вы должны проверить, в каком потоке вы находитесь, когда получите его.Если это не в главном потоке, используйте для выполнения в главном потоке NSObject executeSelectorOnMainThread: withObject: waitUntilDone:

.Поток безопасно.(Я полагаю, что CATiledLayer делает некоторые умные вещи из-за этого)

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

4 голосов
/ 18 августа 2011

Если вы пишете обычный код UIViewController, вам не нужно беспокоиться о безопасности потоков в iOS.В iOS любое сообщение об интерфейсе пользователя должно выполняться в главном потоке.

Если вы сами не выполняете какое-либо сообщение в фоновом режиме, обычно в большинстве случаев вам не нужно беспокоиться о потоке., он всегда будет в главном потоке.

PS Некоторые фреймворки, такие как Game Kit, иногда выполняют сообщения в фоновом режиме, но это не касается пользовательского интерфейса, и документ от Apple предупредит вас, чтобы убедиться, что сообщениеработает на основном потоке.

0 голосов
/ 18 августа 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...