Sobes.tech
Middle

Mis on Autorelease Pool?

sobes.tech AI

Vastus AI-lt

Autorelease Pool on mehhanism Objective-C ja Swift (läbi Objective-C jooksutamise aja suhtluse) mälu haldamiseks, kasutades viidete arvu arvutust (ARC). See võimaldab objekti vabastamist edasi lükata kuni pooli lõpp või kuni selge drain-i kutsumine.

Objektid, mis on pandud Autorelease Pooli (näiteks meetodi kaudu, mis tagastab autoreleased objekti), ei vabastata kohe pärast viimase tugeva viite kaotamist. Selle asemel lisatakse need poodi ja vabastatakse, kui pood tühjendatakse (drained).

See on kasutusel objektidele, mille eluea pikkus on teadmata või ei ole täpselt määratletud kompileerimise ajal, näiteks objekti tagastamisel meetodist, kui kutsuva koodi ei saa garanteerida, et ta omandab selle kohe.

Näited:

  • Ajutiste objektide korduv loomine tsükli sees.
  • Teatud API-dega töötamine, mis tagastavad autoreleased objekte.

Kaasaegses Swiftis ARC-ga kasutatakse Autorelease Pooli harvemini otse, kuna kompilaator haldab objekti eluea aega tõhusamalt. Kuid see eksisteerib endiselt jooksuaegses tasandil ning võib olla selgelt loodud ja kasutatud, näiteks jõudluse optimeerimiseks suurte ajutiste objektide arvuga tsüklites või vanema Objective-C koodiga suhtlemisel.

Objekti selge loomine Objective-C:

// Objective-C
@autoreleasepool {
    // Kood, mis loob autoreleased objekte
} // Pood tühjendatakse siin

Objekti selge loomine Swiftis:

// Swift
import Foundation // NSAutoreleasePool jaoks

autoreleasepool {
    // Kood, mis loob autoreleased objekte (näiteks töötades mõne Foundation API-ga)
} // Pood tühjendatakse siin