Middle+
iOS'ta bellek nasıl yapılandırılmıştır?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS, çoklu türlere sahip hiyerarşik bir bellek yapısı kullanır:
-
RAM (Rastgele Erişim Belleği):
- Hızlı, enerjiye bağımlı bir bellek türüdür.
- Aktif uygulamaları ve verileri depolamak için kullanılır.
- Swift/Objective-C nesneleri için ARC (Otomatik Referans Sayacı) mekanizması ve işletim sistemi tarafından yönetilir.
- Bellek yetersizliği durumunda, sistem en az aktif uygulamaları kapatabilir.
-
Gömülü Bellek (NAND Flash):
- RAM'den daha yavaş, ancak enerjiye bağımlı olmayan bir bellek türüdür.
- İşletim sistemi, uygulamalar, kullanıcı verileri (fotoğraflar, videolar, belgeler) için kullanılır.
- Sınırlı yazma döngüsü kaynağına sahiptir.
-
Önbellek Belleği (L1, L2, L3):
- İşlemci seviyesinde çok hızlı bellektir.
- Sık kullanılan talimatlar ve verileri depolamak için kullanılır, böylece RAM erişimi hızlandırılır.
ARC (Otomatik Referans Sayacı)
- Swift ve Objective-C'de bellek yönetim mekanizmasıdır, nesnelere olan referansları otomatik olarak izler ve yönetir.
- Her nesnenin bir referans sayacı vardır. Sıfıra ulaştığında, nesne tarafından kullanılan bellek serbest bırakılır.
- Bellek sızıntılarını önler, ancak
strong reference cycles(güçlü referans döngüleri) ile çalışırken dikkat gerektirir, bunlarweakveyaunownedile çözülebilir.
Sanal Bellek
- iOS, programların fiziksel RAM'den daha büyük adres alanı kullanmasına izin veren sanal bellek kullanır.
- Bellek sayfaları RAM ile dosya sistemi arasında taşınabilir (iOS'ta sınırlıdır, esasen kullanılmayan sayfaların temizlenmesiyle sınırlıdır, tam disk takası gibi değildir macOS'ta).
- "Sıkıştırılmış bellek" gibi mekanizmalar, sayfaları yazarak yerine sıkıştırabilir.
Uygulama Bellek Yönetimi
- Geliştirici, çoğunlukla ARC aracılığıyla bellekle çalışır.
- Bellek sızıntılarını önlemek için
weakveunowneddoğru kullanılmalıdır. - Bellek tüketimini optimize etmek gerekir, örneğin, kaynakları talep üzerine yükleyerek, verimli veri yapıları kullanarak ve aşırı nesne oluşturmayı önleyerek.
- Xcode Instruments (Allocations, Leaks) gibi araçlar, bellek kullanımı profilini çıkarmak ve sızıntıları tespit etmek için kullanılır.
weak kullanımıyla güçlü referans döngülerini önlemek için örnek:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("Person \(name) başlatılıyor")
}
deinit {
print("Person \(name) yok ediliyor")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Burada 'weak' kullanın
init(unit: String) {
self.unit = unit
print("Apartment \(unit) başlatılıyor")
}
deinit {
print("Apartment \(unit) yok ediliyor")
}
}
var john: Person? = Person(name: "John Appleseed")
var unit4A: Apartment? = Apartment(unit: "4A")
john?.apartment = unit4A
unit4A?.tenant = john
// Tenant güçlü olsaydı, john ve unit4A nil yapıldığında,
// Person ve Apartment nesneleri deinitialization gerçekleşmezdi
john = nil // deinit çağrılır
unit4A = nil // deinit çağrılır