Sobes.tech
Junior — Middle

Կարող եք բացատրել ավտոմատ և ձեռքով հիշողության կառավարման տարբերությունները ավտոմատ հղումահաշվարկի համատեքստում?

sobes.tech AI

Պատասխան AI-ից

Ավտոմատ հիշողության կառավարումը ավտոմատ ռեֆերենցիայի հաշվարկի (ARC) միջոցով՝ դա մեխանիզմ է, որտեղ համակարգը ինքն է հետևում օբյեկտի վրա հղումների քանակին և ազատում է հիշողությունը, երբ հղումները ավարտվում են: iOS-ում ARC-ն ինտեգրված է կոմպիլյատորին, և ծրագրավորողը պետք է բացարձակապես չհրավիրի retain/release:

Ձեռքով հիշողության կառավարումը պահանջում է, որ ծրագրավորողը ինքն է կանչում մեթոդները՝ ավելացնելու և նվազեցնելու հղումների հաշվիչը (retain/release), որպեսզի վերահսկի օբյեկտների կյանքի տևողությունը:

Հիմնական տարբերությունները՝

  • Ավտոմատ (ARC):

    • Կոմպիլյատորը ինքն է ավելացնում հիշողության կառավարման կանչերը:
    • Կրճատում է սխալների հավանականությունը՝ ինչպիսիք են հիշողության լիքները կամ կրկնակի ազատումը:
    • Պահանջում է հասկանալ ուժեղ հղումների ցիկլերը՝ լիքներից խուսափելու համար:
  • Ձեռքով:

    • Ծրագրավորողը ինքն է կառավարում retain/release:
    • Ավելի ենթակա է սխալների:
    • Հնարավորություն է տալիս ավելի նուրբ վերահսկողություն օբյեկտների կյանքի տևողության վրա:

Swift-ում ARC-ի օրինակ՝

class Person {
    var name: String
    init(name: String) { self.name = name }
}

var p1: Person? = Person(name: "Иван")
var p2 = p1 // հղումների հաշվիչը ավտոմատորեն ավելանում է
p1 = nil // օբյեկտը դեռ կենդանի է, քանի որ p2 հղում է անում
p2 = nil // օբյեկտը ազատվում է

Ձեռքբերումով կառավարման դեպքում (Objective-C առանց ARC) պետք է բացահայտ կանչել [retain] և [release]։