uiimage.size, .CGColor, uicolor.Безопасность потоков CGColor в ios3

#iphone #thread-safety #uiimage

#iPhone #потокобезопасность #uiimage

Вопрос:

В ios3 (3.1.2 и выше) является ли потокобезопасным доступ к следующим свойствам?

  1. UIImage.size
  2. UIImage.CGColor — редактировать: упс, это должно быть UIImage.CGImage
  3. UIColor.CGColor

Спасибо

Ответ №1:

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


Вот документация по этому поводу. Если бы свойства были объявлены без nonatomic , то во время получения и установки значения использовалась бы блокировка, гарантирующая, что только один поток обращался к значению одновременно. Как и следовало ожидать, это приводит к небольшому снижению производительности. Когда свойство объявлено как nonatomic , это просто означает, что блокировка не используется. Вы можете получить и установить значение свойства из любого потока, который вам нравится. Однако, как и при любом многопоточном доступе к значению, существует вероятность конфликта потоков из-за этого свойства, что может (при некоторых обстоятельствах) привести к неопределенному поведению.

Обычно, однако, вам не нужно слишком беспокоиться об этом. Это действительно относится только к свойствам, значения которых могут быть установлены из нескольких потоков. Все интересующие вас свойства ( UIImage.size , UIImage.CGImage , UIColor.CGColor ) объявлены как readonly , что означает, что на самом деле не о чем беспокоиться при доступе к этим значениям из нескольких потоков, одновременно или иным образом.

Комментарии:

1. вау, спасибо, не знал, что я могу так интерпретировать «неатомный». Есть ли способ получить потокобезопасный способ определения размера UIImage?

2. можно ли получить доступ к этим свойствам из неосновного потока, если к нему обращается один поток? или это совершенно неправильно обращаться к ним из неосновного потока?