DrawRect: вызывается в нескольких потоках при использовании CATiledlayer? - PullRequest
4 голосов
/ 18 июня 2010

Я знаю, что drawLayer: и drawlayer:inContext: вызываются в нескольких потоках при использовании CATiledlayer, но как насчет drawRect:?

Пример кода Apple PhotoScroller использует drawRect: для получения своих изображений с диска, и у него нет специального кода для обработки потоков.

Я пытаюсь определить, должна ли моя модель для CATiledLayer быть поточно-ориентированной.

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Да, drawRect может и будет вызываться в нескольких потоках (протестировано на OS 4.2).

Это поведение менее очевидно, если ваш рисунок достаточно быстр, чтобы опередить появление новых жестов масштабирования, так что ваше приложение может работать нормально, пока не будет протестировано с быстрым вводом жестов масштабирования.

Одна из альтернатив - сделать вашу модель поточно-ориентированной.

Если потокобезопасность достигается за счет синхронизации большей части доступа к модели данных к одному потоку рисования за раз, тогда вы могли бы сделать то же самое, чтобы сменить тело drawRect на что-то вроде @syncrhonize (self), на работу.

Я не нашел способа запросить, чтобы CATiledLayer использовал только один фоновый поток.

2 голосов
/ 21 января 2012

Я обнаружил, что CATiledLayer использует несколько фоновых потоков в iOS Simulator, но один фоновый поток на моем iPhone.

Мой Mac имеет двухъядерный процессор, а мой iPhone - одноядерный (A4).

Я подозреваю, что устройство iOS с процессором A5 также будет использовать несколько потоков.

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

Вы видели этот технический вопрос и ответ от Apple ?

Он не дает прямого ответа на ваш вопрос, но может помочь вам решить, как реализовать вашу модель.

...