Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024
Den enkleste måten å administrere minne for iOS-apper er å la Objective-C runtime-avtale med det ved hjelp av et system som kalles automatisk referanse telling (ARC) - vennligst bruk den. (ARC har vært tilgjengelig siden 2011 i Xcode 4. 2 eller nyere.)
Når iOS ble først introdusert, måtte du manuelt administrere minne ved å holde oversikt over livscyklusen til objektene i programmet. Du gjorde det ved å fortelle Objective-C runtime-systemet når du skal beholde og når du skal slippe objekter, ved hjelp av en skjema Apple kalt manuell hold-release, som igjen brukte en teknikk kjent som referansetelling.
Selv om manuell administrasjon av minne er absolutt en plage, forklares det her fordi du vil se det i eldre iOS-programmer, så du kan også være forberedt. Her er hva du gjør. Først oppretter du en klasse som arver fra roten klassen NSObject i stiftelsens rammeverk. Klassen din arver deretter tre metoder for minnehåndtering:
-
behold
-
utgivelse
-
autorelease
referanseteller i objektet som i hovedsak forteller kjøretidssystemet hvor mange steder i programmet ditt (eller andre objekter) vil opprettholde en referanse til gjenstand. Her er hvordan denne referansetellingen styres av iOS:
Hver gang beholdningen er påkalt et målobjekt, økes referansetellingen med en.
-
Når de slutter å trenge målobjektet, vil de fem objektene ringe ut på objektet. Hver gang utgivelsen blir kalt, blir referanseantallet til målobjektet redusert (med en).
-
Når referansetellingen blir null (det vil si når det siste objektet ringer ut), blir objektets minne frigjort av systemet.
-
Den tredje metoden - autorelease - kalles når en gjenstand du har opprettet, må avleveres til en tråd, og du vil at tråden skal ta vare på objektet når tråden er ferdig.
Internt bruker ARC-systemet det samme referanse telling systemet som brukes til manuell referanse telling. Men for å bruke ARC, legger du koden i @autoreleasepool-blokkene slik:
@autoreleasepool {… Koden din …}
Den
kompilatoren setter inn riktig minnehåndteringsmetode samtaler inn i koden så at noe som er opprettet i denne @autoreleasepool-blokken, frigjøres når programmet går ut av blokken.