Атомни срещу Атомни Свойства Курс на срив

Свойствата на Objective-C могат да бъдат определени като атомни или неатомични.

Каква е разликата между двете и как се държат свойствата на Swift? Атомно или неатомно?

Атомни свойства

Определянето на свойство като атомно ще гарантира, че ще бъде върната валидна стойност. Забележете, че валидността не винаги означава правилно (повече за това в следващия раздел на тази публикация).

Това също не означава, че атомните свойства са безопасни за нишки. Различните нишки могат да се опитват да пишат и четат едновременно. Ще се върне една от двете стойности - стойността преди промяната или стойността на промяната

Атомните свойства страдат от незначителен удар по производителност поради заключване и отключване преди и след настройка / получаване на стойност.

Atomic е поведението по подразбиране за свойствата - това ще получите, ако не посочите нищо.

Пример за атомни свойства и нишки

Да речем, че имаме атомно свойство:

точка = CGPoint (x: 10, y: 10)

В нашето приложение имаме три нишки, които едновременно се опитват да получат достъп до нашата собственост на точки.

  • Тема A се опитва да прочете свойството CGPoint
  • Темата B е точка за настройка = CGPoint (x: 1, y: 1)
  • Темата C е точка за настройка = CGPoint (x: 5, y: 5)

Големият въпрос е - какво ще бъде върнато в нишка A?

Една от следните три стойности:

(x = 10, y = 10)
(x = 1, y = 1)
(x = 5, y = 5)

Друг въпрос, който можем да зададем, е - каква ще бъде крайната стойност на точковото свойство?

Една от следните две стойности:

(x = 1, y = 1)
(x = 5, y = 5)

Неатомни свойства

Неатомните свойства нямат гаранция по отношение на върнатата стойност. Тя може да бъде правилната стойност, частично записана стойност или дори някаква стойност на боклука.
Както повечето неща, които не са безопасни - това идва с повишена скорост на достъп до тези свойства.

Пример за неатомни свойства и нишки

Да вземем едно и също свойство на точка и същите три нишки да правят абсолютно същите неща, както в примера на нишките за атомни свойства.

Какво ще бъде върнато в нишка A?

Неизвестен! Тя може да бъде една от трите различни стойности в предишния пример. Дори може да бъде (x = 5, y = 1) две нишки се опитват да зададат стойността едновременно. Стойността е частично записана и ние получаваме обратно частично записана стойност.

Как по време на изпълнение на Objective-C работи?

Нека да разгледаме метода „зададена стойност“ за времето на изпълнение на Objective-C.

Забележете как неатомните свойства директно задават стойността на свойството, докато атомната собственост използва ключалки, за да защити зададената операция.

Ами Суифт?

Свойствата на Swift по подразбиране не са атомни.
Но - Според Apple, използвайки Swift с какао и Objective-C (Swift 3.1):

Атрибутите на свойството Atomicity (атомни и неатомични) не се отразяват в съответната декларация за свойствата на Swift, но гаранциите за атомност на реализацията Objective-C все още са налице, когато импортираната собственост е достъпна от Swift.

Така че - ако дефинирате атомно свойство в Objective-C, то ще остане атомно, когато се използва от Swift.