Hrunanámskeið gegn atómlegum samanburði við aðrar atómlegar eignir

Hægt væri að skilgreina hlutlæga-C eiginleika sem atóm eða ekki atóm.

Hver er munurinn á þessu tvennu og hvernig hegðar sér Swift eiginleika? Atóm eða ekki atóm?

Atomic Properties

Að skilgreina eign sem atóm mun tryggja að gilt gildi verður skilað. Taktu eftir að gilt þýðir ekki alltaf rétt (meira um það í næsta hluta þessarar færslu).

Þetta þýðir heldur ekki að kjarnorkueiginleikar séu þráður öruggir. Mismunandi þræðir geta reynt að skrifa og lesa á sama tíma. Eitt af tveimur gildum verður skilað - gildið fyrir breytinguna eða gildi breytinganna

Atómlegir eiginleikar þjást af minniháttar afköstum vegna læsingar og lás fyrir og eftir að hafa stillt / fengið gildi.

Atomic er sjálfgefið hegðun eigna - þetta færðu ef þú tilgreinir ekki neitt.

Dæmi um frumeindir og þræði

Segjum að við höfum atóm eiginleika:

lið = CGPoint (x: 10, y: 10)

Í appinu okkar höfum við þrjá þræði sem eru samtímis að reyna að fá aðgang að punktareign okkar.

  • Þráður A reynir að lesa CGPoint eignina
  • Þráður B er stillingarpunktur = CGPoint (x: 1, y: 1)
  • Þráður C er stillipunktur = CGPoint (x: 5, y: 5)

Stóra spurningin er - hvað verður skilað í þráð A?

Eitt af eftirfarandi þremur gildum:

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

Önnur spurning sem við getum spurt er - hvert verður lokagildi punktaeignarinnar?

Eitt af eftirfarandi tveimur gildum:

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

Eiginleikar sem ekki eru frumeindir

Eiginleikar sem ekki hafa lotukerfinu er engin ábyrgð varðandi skilað gildi. Það getur verið rétt gildi, að hluta til skrifað gildi eða jafnvel eitthvað sorpgildi.
Eins og flestir hlutir sem ekki eru öruggir - þá fylgir aukinn hraði aðgangs að þessum eiginleikum.

Eiginleikar og þræðir sem ekki eru kjarnorkuefni

Við skulum taka sömu punktareignina og sömu þrjá þræði sem gera nákvæmlega sömu hluti og í dæminu um atóm eiginleika.

Hvað verður skilað í þráð A?

Óþekktur! Það getur verið eitt af þremur mismunandi gildum í fyrra dæmi. Það gæti jafnvel verið (x = 5, y = 1) tveir þræðir eru að reyna að stilla gildið á sama tíma. Gildið hefur verið skrifað að hluta og við erum að fá aftur skriflegt gildi.

Hvernig virkar Obunt-C afturkreistingur þetta?

Við skulum líta á „sett gildi“ aðferðina fyrir Ob Object-C keyrslutímann.

Taktu eftir því hvernig atómlegir eiginleikar eru að setja gildi fasteignarinnar beint á meðan atómareignir nota lokka til að vernda stillingu.

Hvað með Swift?

Snöggir eiginleikar eru sjálfkrafa ekki atóm.
En - samkvæmt Apple sem notar Swift með kakó og Objective-C (Swift 3.1):

Eiginleikar kjarnorkueigna (atomic og nonatomic) endurspeglast ekki í samsvarandi yfirlýsingu um Swift-eignina, en frumeindarábyrgðin á markmiðinu-C útfærslunni er enn í gildi þegar innfluttu eignirnar eru komnar frá Swift.

Svo - ef þú skilgreinir kjarnorkueign í Objective-C þá verður hún áfram atóm þegar hún er notuð af Swift.