Middle+
iOS-də yaddaş necə qurulub?
sobes.tech Süni İntellekt
AI-dan cavab
iOS çoxsaylı növlərə malik ierarxik yaddaş quruluşundan istifadə edir:
-
RAM (Təsadüfi giriş yaddaşı):
- Sürətli, enerji asılı yaddaş növü.
- Aktiv tətbiqləri və məlumatları saxlamaq üçün istifadə olunur.
- Swift/Objective-C obyektləri üçün ARC (Avtomatik Referans Sayğacı) mexanizmi və əməliyyat sistemi tərəfindən idarə olunur.
- Yaddaş çatışmazlığı zamanı sistem ən az aktiv tətbiqləri bağlaya bilər.
-
Quraşdırılmış yaddaş (NAND Flash):
- RAM-dən yavaş, lakin enerji asılı olmayan yaddaş növü.
- İşletim sistemi, tətbiqlər, istifadəçi məlumatları (şəkillər, videolar, sənədlər) üçün istifadə olunur.
- Yazma dövrlərinin sayı ilə məhdud resursu var.
-
Keş yaddaşı (L1, L2, L3):
- Prosessor səviyyəsində çox sürətli yaddaş.
- Tez-tez istifadə olunan göstərişlər və məlumatlar üçün istifadə olunur, RAM-ə giriş sürətini artırmaq üçün.
ARC (Avtomatik Referans Sayğacı)
- Swift və Objective-C-də yaddaş idarəetmə mexanizmi, obyektlərə olan referansları avtomatik izləyir və idarə edir.
- Hər obyektin referans sayğacı var. Sıfıra çatanda, obyekt tərəfindən istifadə olunan yaddaş sərbəst buraxılır.
- Yaddaş sızmalarını qarşısını alır, lakin
weakvəunownedilə işləyərkən diqqət tələb edir.
Virtual yaddaş
- iOS virtual yaddaş istifadə edir, proqramların fiziki RAM-dən daha böyük ünvan sahəsini istifadə etməsinə imkan verir.
- Yaddaş səhifələri RAM və fayl sistemi arasında köçürülə bilər (iOS-də bu məhduddur, əsasən istifadə olunmayan səhifələrin təmizlənməsi ilə, diskə tam swap ilə deyil, macOS kimi).
- "Sıxılmış yaddaş" kimi mexanizmlər səhifələri sıxışdırıb saxlamağa yazmadan sıxışdıra bilər.
Tətbiqdə yaddaş idarəetməsi
- İnkişaf etdirici əsasən ARC vasitəsilə yaddaş ilə işləyir.
weakvəunowneddüzgün istifadə edilərək yaddaş sızmalarını qarşısını almaq vacibdir.- Yaddaş istifadəsini optimallaşdırmaq lazımdır, məsələn, resursları tələb olunduqda yükləmək, səmərəli məlumat strukturlarından istifadə etmək və çox sayda obyekt yaratmaqdan qaçınmaq.
- Xcode Instruments (Allocations, Leaks) kimi alətlər yaddaş istifadəsini profilaktik etmək və sızmaları tapmaq üçün istifadə olunur.
weak istifadə nümunəsi, güclü referans döngələrini qarşısını almaq üçün:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("Person \(name) başlanır")
}
deinit {
print("Person \(name) deinitialization olunur")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Burada 'weak' istifadə edin
init(unit: String) {
self.unit = unit
print("Apartment \(unit) başlanır")
}
deinit {
print("Apartment \(unit) deinitialization olunur")
}
}
var john: Person? = Person(name: "John Appleseed")
var unit4A: Apartment? = Apartment(unit: "4A")
john?.apartment = unit4A
unit4A?.tenant = john
// Əgər tenant güclü olsaydı, john və unit4A nil ediləndə,
// Person və Apartment obyektləri deinitializasiya olunmazdı
john = nil // deinit çağırılır
unit4A = nil // deinit çağırılır