defer resurssien vapauttamiseen
Sulje tiedostot ja vapauta resurssit luotettavasti.
defer resurssien vapauttamiseen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. 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ä 4 oppituntia.
Siivousongelma
Tiedostojen, lukkojen ja yhteyksien kaltaiset resurssit on vapautettava. Jos resurssin vapautus unohtuu jollakin suorituspolulla, seurauksena on vuoto.
func work() {
print("acquire resource")
print("use resource")
print("release resource")
}
work()defer takaa vapautuksen
Kun vapautus sijoitetaan defer-lohkoon, sen suorittaminen taataan funktion poistumistavasta riippumatta.
func work() {
print("acquire resource")
defer { print("release resource") }
print("use resource")
}
work()Tiedostokahvan simulointi
Tässä yksinkertainen struct mallintaa avaamista ja sulkemista. defer varmistaa, että close kutsutaan aina.
struct File {
let name: String
func close() { print("closed", name) }
}
func readFile() {
let f = File(name: "data.txt")
defer { f.close() }
print("reading", f.name)
}
readFile()Lukon hankkiminen ja vapauttaminen
Mallintakaa lukko: hankkikaa se ja lykätkää sen vapautus deferillä, jotta kriittinen osio vapautetaan aina.
func critical() {
print("lock acquired")
defer { print("lock released") }
print("critical section work")
}
critical()Siivous alustuksen vieressä
Kun siivous pidetään heti alustuksen jälkeen, niiden yhteys on ilmeinen ja siivouksen unohtaminen vaikeampaa.
func session() {
print("connect")
defer { print("disconnect") }
print("send request")
print("receive response")
}
session()Useita resursseja
Kun resursseja on useita, määritelkää jokaisen resurssin siivous heti sen alustuksen jälkeen. LIFO-järjestys sulkee resurssit oikein.
func transaction() {
print("open connection")
defer { print("close connection") }
print("begin transaction")
defer { print("commit transaction") }
print("run query")
}
transaction()Laskurin nollaaminen
Defer voi palauttaa tilan ennalleen, esimerkiksi nollaamalla lipun näkyvyysalueen päättyessä.
func tracked() {
var active = true
defer { active = false; print("active reset to", active) }
print("active is", active)
}
tracked()Toiston välttäminen
Ilman defer-lohkoa joutuisitte toistamaan siivouksen jokaisella poistumispolulla. defer avulla kirjoitatte sen kerran.
func validate(_ ok: Bool) {
print("start")
defer { print("cleanup done once") }
if !ok {
print("invalid")
return
}
print("valid")
}
validate(false)Siivous lasketun arvon avulla
Defer voi kirjata lopullisen mittaustuloksen, kuten käsiteltyjen kohteiden määrän.
func batch() {
var processed = 0
defer { print("processed", processed, "items") }
for _ in 1...3 { processed += 1 }
}
batch()Väliaikaisen tilan palauttaminen
Käyttäkää deferiä asetuksen väliaikaiseen muuttamiseen ja sen luotettavaan palauttamiseen.
func withVerbose() {
var verbose = false
verbose = true
defer { verbose = false; print("verbose restored:", verbose) }
print("verbose during work:", verbose)
}
withVerbose()Hyvä käytäntö
Aina kun hankitte jotakin vapautettavaa, rekisteröikää vapautus defer-lohkolla heti seuraavalla rivillä.
func handle() {
print("acquire")
defer { print("release") }
print("process")
}
handle()Pikatarkistus
Testatkaa deferiä siivouksessa.
Kertaus
Rekisteröikää resurssin vapautus defer-lohkolla heti hankkimisen jälkeen. Siivous suoritetaan varmasti jokaisella poistumispolulla, purku pysyy alustuksen vieressä eikä siivousta tarvitse toistaa eri palautuspoluilla.
func work() {
print("acquire")
defer { print("release") }
print("use")
}
work()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 ”defer resurssien vapauttamiseen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “defer resurssien vapauttamiseen”. 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ä 4 oppituntia.
Mitä opin oppitunnilla ”defer resurssien vapauttamiseen”?
Sulje tiedostot ja vapauta resurssit luotettavasti. 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 3/4.
Kuinka kauan ”defer resurssien vapauttamiseen”-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
- defer-rakenteen toiminta
- Useiden defer-lohkojen suoritusjärjestys
- defer resurssien vapauttamiseen
- defer virheiden ja aikaisten palautusten kanssa