Middle+
Kako je organizovana memorija u iOS-u?
sobes.tech АИ
Одговор од АИ
iOS користи хиерархичку структуру меморије са више типова:
-
Рам (RAM - Оперативна меморија):
- Брза, енергетски зависна врста меморије.
- Користи се за чување активно радијих апликација и података.
- Управља је оперативни систем и механизам ARC (Automatic Reference Counting) за објекте Swift/Objective-C.
- У случају недостатка меморије, систем може затворити (терминирати) мање активне апликације.
-
Уграђена меморија (NAND Flash):
- Спорија од RAM-а, али енергетски независна.
- Користи се за чување оперативног система, апликација, корисничких података (фотографије, видео записи, документи).
- Има ограничен број циклуса преписа.
-
Кеш меморија (L1, L2, L3):
- Веома брза меморија на нивоу процесора.
- Користи се за чување често коришћених инструкција и података ради убрзања приступа RAM-у.
ARC (Automatic Reference Counting)
- Механизам управљања меморијом у Swift и Objective-C, који аутоматски прати и управља референцама на објекте.
- Сваког објекта има бројач референци. Када достигне нулу, меморија која заузима објекат се ослобађа.
- Превентивно спречава губитак меморије, али захтева пажњу при раду са цикличним јаким референцама (
strong reference cycles), које се могу решити коришћењемweakилиunownedреференци.
Виртуелна меморија
- iOS користи виртуелну меморију, што омогућава програмима да користе већи адресни простор од физички доступне RAM.
- Странице меморије могу бити пренесене између RAM-а и датотечног система (иако је у iOS то ограничено, углавном кроз чишћење неупотребљених страница, а не пуноправно своповање на диск као у macOS-у).
- Механизми као што су "компресована меморија" могу компримовати странице уместо да их пишу у складиште.
Управљање меморијом у апликацији
- Развијач ради углавном са меморијом преко ARC.
- Важно је избегавати губитак меморије, правилно користећи
weakиunowned. - Потребно је оптимизовати потрошњу меморије, на пример, учитавањем ресурса по потреби, коришћењем ефикасних структура података и избегавањем стварања вишка објеката.
- Алати као што су Xcode Instruments (Allocations, Leaks) се користе за профилисање потрошње меморије и проналажење губитака.
Пример коришћења weak за спречавање циклуса јаких референци:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("Person \(name) is being initialized")
}
deinit {
print("Person \(name) is being deinitialized")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Користите 'weak' овде
init(unit: String) {
self.unit = unit
print("Apartment \(unit) is being initialized")
}
deinit {
print("Apartment \(unit) is being deinitialized")
}
}
var john: Person? = Person(name: "John Appleseed")
var unit4A: Apartment? = Apartment(unit: "4A")
john?.apartment = unit4A
unit4A?.tenant = john
// Ако би био `tenant` јак, приликом уклањања `john` и `unit4A`
// објекти `Person` и `Apartment` не би били деинициализовани
john = nil // позив `deinit` за `john`
unit4A = nil // позив `deinit` за `unit4A`