ARC:n perusteet: strong / weak / unowned
Opiskelkaa ARC-viitelaskentaa ja sitä, milloin strong -, weak - ja unowned -viitteitä käytetään muistivuotojen välttämiseksi.
ARC:n perusteet: strong / weak / unowned on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 3 oppituntia.
ARC minuutissa
Swift käyttää ARC-mekanismia (Automatic Reference Counting). Jokainen strong-viittaus kasvattaa luokan ilmentymän viittausmäärää. Kun määrä laskee nollaan, deinit suoritetaan ja muisti vapautetaan.
Vahva viittaus oletuksena
Strong on oletus. Kun viimeinen strong-viittaus poistuu, deinit kutsutaan.
final class Person {
let name: String
init(_ name: String) { self.name = name; print("init:", name) }
deinit { print("deinit:", name) }
}
var p: Person? = Person("Ada")
p = nil // ARC count -> 0, triggers deinitSykli-esimerkki
Kaksisuuntaiset strong-viittaukset muodostavat retain-syklin. ARC ei pysty vapauttamaan niitä, mikä aiheuttaa muistivuodon.
final class A {
var b: B?
deinit { print("A deinit") }
}
final class B {
var a: A?
deinit { print("B deinit") }
}
var a: A? = A()
var b: B? = B()
a?.b = b // strong
b?.a = a // strong
a = nil // no deinit (cycle)
b = nil // still no deinit (leak)weak-viittaus
Tehkää toisesta puolesta weak syklin välttämiseksi. weak-viittaukset ovat valinnaisia ja muuttuvat automaattisesti arvoksi nil, kun olio vapautetaan.
final class A2 {
weak var b: B2? // weak breaks the strong cycle
deinit { print("A2 deinit") }
}
final class B2 {
var a: A2?
deinit { print("B2 deinit") }
}
var a2: A2? = A2()
var b2: B2? = B2()
a2?.b = b2 // weak
b2?.a = a2 // strong
a2 = nil // A2 deinit runs
b2 = nil // B2 deinit runsunowned-viittaus
Käyttäkää unowned-viittausta, kun viitattu olio elää tätä viittausta pidempään. Viittaus ei ole valinnainen, eikä sitä aseteta arvoon nil; sen käyttäminen deallocin jälkeen kaataa ohjelman, joten elinkaaret on taattava.
final class Customer {
let name: String
var card: CreditCard?
init(_ name: String) { self.name = name }
deinit { print("Customer deinit") }
}
final class CreditCard {
unowned let owner: Customer // never optional; owner must outlive card
init(owner: Customer) { self.owner = owner }
deinit { print("CreditCard deinit") }
}
var cust: Customer? = Customer("Lars")
cust!.card = CreditCard(owner: cust!)
cust = nil // deallocates both (no cycle)Vinkit ja käytännöt
Vinkit:
- Käyttäkää oletuksena strong-viittauksia.
- Katkaiskaa syklit weak-viittauksilla; delegaatit ovat yleensä weak-viittauksia.
- Käyttäkää unowned-viittauksia vain, kun elinkaari on taattu (esimerkiksi lapsi → vanhempi).
- Luokat ovat viitetyyppejä; struct- ja enum-tyyppeihin eivät päde ARC:n säännöt.
weak vai unowned?
Pikatarkistus: Milloin valitsette weak- ja milloin unowned-viittauksen?
Kertaus
Kertaus: ARC vapauttaa oliot, kun yhtään strong-viittausta ei ole jäljellä. Estäkää syklit weak-viittauksella (valinnainen) tai unowned-viittauksella (elinkaari taattu). Valitkaa pienin turvallinen omistajuus.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”ARC:n perusteet: strong / weak / unowned” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “ARC:n perusteet: strong / weak / unowned”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”ARC:n perusteet: strong / weak / unowned”?
Opiskelkaa ARC-viitelaskentaa ja sitä, milloin strong -, weak - ja unowned -viitteitä käytetään muistivuotojen välttämiseksi. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.
Kuinka kauan ”ARC:n perusteet: strong / weak / unowned”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- ARC:n perusteet: strong / weak / unowned
- Retain-syklit ja niiden katkaiseminen weak/unowned-viitteillä
- Arvotyypit jakamisen vähentämiseen