Atominės ir ne atominės savybės

Objektyviojo C savybes galima būtų apibrėžti kaip atomines arba nenatomines.

Kuo skiriasi „Swift“ savybės? Atominis ar ne atominis?

Atominės savybės

Apibrėžus nuosavybę kaip atominę, bus garantuojama, kad bus grąžinta galiojanti vertė. Atkreipkite dėmesį, kad galiojantis ne visada reiškia teisingą (plačiau apie tai kitame šio įrašo skyriuje).

Tai taip pat nereiškia, kad atominės savybės yra saugios sriegiams. Skirtingos gijos gali bandyti rašyti ir skaityti tuo pačiu metu. Bus grąžinta viena iš dviejų verčių - vertė prieš pakeitimą arba pakeitimo vertė

Atominės savybės kenčia dėl nedidelio veikimo dėl užrakinimo ir atrakinimo prieš ir po vertės nustatymo / gavimo.

Atominis yra numatytasis nuosavybės elgesys - štai ką jūs gaunate, jei nieko nenurodote.

Atomų savybių ir gijų pavyzdys

Tarkime, kad mes turime atominę savybę:

taškas = CGPoint (x: 10, y: 10)

Savo programoje turime tris temas, kurios vienu metu bando pasiekti mūsų taško nuosavybę.

  • Siūlas A bando perskaityti „CGPoint“ ypatybę
  • Sriegis B yra nustatymo taškas = CGPoint (x: 1, y: 1)
  • Sriegis C yra nustatymo taškas = CGPoint (x: 5, y: 5)

Didelis klausimas yra - kas bus grąžintas į A siūlą?

Viena iš šių trijų verčių:

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

Kitas klausimas, kurį galime užduoti, yra - kokia bus galutinė taško savybė?

Viena iš šių dviejų verčių:

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

Neatominės savybės

Neatominės savybės negarantuoja grąžinamos vertės. Tai gali būti teisinga, iš dalies parašyta vertė ar net tam tikra šiukšlių vertė.
Kaip ir dauguma nesaugių dalykų, padidėja prieiga prie šių savybių.

Neatominės savybės ir siūlai

Paimkime tą pačią taško savybę ir tas pačias tris gijas, darydami tuos pačius veiksmus, kaip ir atominių savybių gijų pavyzdyje.

Kas bus grąžinta į siūlą A?

Nežinoma! Tai gali būti viena iš trijų skirtingų reikšmių ankstesniame pavyzdyje. Tai gali būti net (x = 5, y = 1), dvi gijos bando nustatyti vertę tuo pačiu metu. Vertė buvo iš dalies parašyta, ir mes grąžiname iš dalies parašytą vertę.

Kaip tai daro „Objective-C“ vykdymo laikas?

Pažvelkime į „Tikslinės-C“ vykdymo laiko „nustatytos vertės“ metodą.

Atkreipkite dėmesį, kaip ne atominės savybės tiesiogiai nustato savybės vertę, o atominės savybės naudoja spynos, kad apsaugotų nustatytą operaciją.

O kaip „Swift“?

„Swift“ savybės pagal nutylėjimą nėra atominės.
Bet - Anot „Apple“ naudojamo „Swift“ su kakava ir „Objective-C“ („Swift 3.1“):

Atominės savybės (atominės ir nenatominės) atributai neatsispindi atitinkamoje „Swift“ nuosavybės deklaracijoje, tačiau objektyvo-C įgyvendinimo atomiškumo garantijos vis tiek galioja, kai importuota nuosavybė pasiekiama iš „Swift“.

Taigi - jei objekte-C nurodysite atominę savybę, ji išliks atominė, kai ją naudos „Swift“.