- Published on
Nima uchun persistenslik muhim
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Har qanday ilovani birinchi o'zi yozgan dasturchi bir kundayoq qo'rqinchli muammo bilan to'qnashadi: ilova yopilganda barcha ma'lumot yo'q bo'lib ketadi.
Ro'yxatga element qo'shasiz β yopdingiz, ochdingiz β bo'sh ro'yxat. Sozlamani o'zgartirdingiz β yopdingiz, ochdingiz β yana standart qiymat. Foydalanuvchi shikoyat qiladi: "Ilova hamma narsani unutdi."
Muammo nima? @State faqat xotirada (RAM da) saqlaydi. Ilova yopilganda jarayon tugaydi va xotira tozalanadi. Keyingi ochilishda hamma narsa yangilanadi.
Xotira holat va doimiy ma'lumot
| Xususiyat | @State (xotirada) | Doimiy ma'lumot |
|---|---|---|
| Ilova yopilganda | Yo'qoladi | Qurilmada saqlanib qoladi |
| Tezlik | Darhol β shunchaki RAM o'qish | Biroz sekinroq β disk o'qish |
| Uchun yaxshi | UI holati: qaysi tab tanlangan, sheet ochiqmi | Foydalanuvchi ma'lumoti: sozlamalar, yozuvlar |
| Yo'qolsa riski | Past β UI qayta tiklanadi | Yuqori β foydalanuvchi ishi yo'qoladi |
Asosiy qoida: Foydalanuvchi yo'qolishidan xafa bo'ladigan har qanday ma'lumot doimiy saqlanishi kerak.
iOS da persistenslikning uch vositasi
// 1. @AppStorage β oddiy sozlamalar uchun
// UserDefaults ga yozadi, @State kabi ishlaydi
@AppStorage("isDarkMode") var isDarkMode: Bool = false
// 2. Fayl saqlash β hujjatlar va eksport uchun
// Ilovaning shaxsiy papkasiga yozadi
func eslatmaSaqlash(_ matn: String) {
let url = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("eslatma.txt")
try? matn.write(to: url, atomically: true, encoding: .utf8)
}
// 3. SwiftData β tuzilgan yozuvlar to'plami uchun
// Ma'lumotlar bazasiga yozadi, filtrlash va saralash mumkin
@Model class Vazifa {
var sarlavha: String
var bajarildi: Bool
init(sarlavha: String) {
self.sarlavha = sarlavha
self.bajarildi = false
}
}
Vosita tanlash qo'llanmasi
| Holat | To'g'ri vosita |
|---|---|
| Dark mode toggle | @AppStorage β bitta Bool sozlama |
| Foydalanuvchi ismi | @AppStorage β bitta String qiymat |
| 200 ta jurnal yozuvi | SwiftData β filtrlash kerak bo'lgan to'plam |
| JSON faylni ulashish | Fayl saqlash β foydalanuvchi ko'radigan hujjat |
| Sevimlilari ro'yxati | SwiftData β tuzilgan yozuvlar to'plami |
| Shrift o'lchami sozlamasi | @AppStorage β bitta Int qiymat |
Tezkor ma'lumotnoma
| Vosita | Eng mos | Emas |
|---|---|---|
@AppStorage | Sozlamalar, oddiy bayroqlar | Katta massivlar, tuzilgan ma'lumot |
| Fayl saqlash | Hujjatlar, eksport, kesh | Filtrlash, saralash kerak bo'lsa |
| SwiftData | Yozuvlar to'plami | Bitta Bool/String sozlama |
π― Topshiriq: persistenslik tahlili
Telefoningizdagi ikki ilovani o'ylab ko'ring. Har biri uchun: agar faqat @State ishlatilsa qanday ma'lumot yo'qoladi? Uchta vositadan (@AppStorage, fayl, SwiftData) qaysi biri mos keladi? Kod yozish shart emas β faqat fikrlash.