Sobes.tech
Junior — Middle

Perduodant ar kuriant užraktą, jis kopijuojamas ar perduodamas nuoroda?

sobes.tech AI

Atsakymas iš AI

iOS (Swift/Objective-C) atveju uždarymai (closures) perduodami nuoroda, o ne kopija, perduodant ar kuriant. Paties uždarymo objektas yra nuorodos tipas.

Tačiau, užfiksavus kintamuosius iš išorinio konteksto, uždarymas gali sukurti šių reikšmių kopijas (pavyzdžiui, jei tai yra struktūros tipų reikšmės), arba juos užfiksuoti nuoroda (jei tai yra klasės).

Pavyzdys Swift:

var x = 10
le uždarymas = { print(x) } // uždarymas užfiksuoja x kaip reikšmę (kopiją)
x = 20
uždarymas() // išves 10, nes x buvo užfiksuotas kaip kopija

Perduodant uždarymą funkcijai arba jį saugant kintamajame, perduodama nuoroda į uždarymą, o ne visa jo turinio kopija.

Todėl, uždarymai perduodami nuoroda, bet užfiksuoti kintamieji gali būti kopijuojami arba užfiksuoti nuoroda, priklausomai nuo jų tipo ir konteksto.