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]։