Core Data — bu nədir, məlumat modeli və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-05-04 Oxuma vaxtı: 8 dəq

Core Data Apple tərəfindən məlumatların idarə edilməsi framework-üdür, iOS, macOS, tvOS və watchOS üçün obyekt-relasional xəritələmə təmin edir. O, SQLite, XML və ya ikili anbar üzərində işləyərək tətbiqdə obyektlərin saxlanması, çıxarılması və filtrasiyasını avtomatlaşdırır. Apple Core Data Documentation-ya görə, framework persistemlik yığınını idarə etmək üçün Managed Object Context və NSPersistentContainer anlayışlarından istifadə edir.

Əsas məqamlar

  • Core Data — tətbiqlərdə obyekt-relasional məlumat idarəetməsi üçün Apple framework-ü.
  • NSManagedObjectModel — məlumat sxeminin təsviri: Entity, Attributes və Relationships.
  • NSManagedObject — Core Data anbarında bir qeydə uyğun gələn obyekt.
  • NSManagedObjectContext — obyektlərin yaradılması, oxunması və saxlanması üçün iş sahəsi.
  • NSPersistentContainer — modeli, konteksti və anbar koordinatorunu birləşdirən vahid yığın.

Core Data nədir və iOS-da rolu

Core Data — Cocoa Touch-ın tərkibinə daxil olan obyekt qrafiki və persistemlik idarəetmə framework-üdür. Geniş yayılmış yanlış anlayışın əksinə, Core Data verilənlər bazası deyil, SQLite-dan anbarlardan biri kimi istifadə edə bilən obyekt idarəetmə təbəqəsidir. Core Data-nın əsas vəzifəsi obyektlərdəki dəyişiklikləri izləmək, onların həyat dövrünü idarə etmək və vəziyyəti disk ilə sinxronlaşdırmaqdır.

Framework obyekt qrafiki təmin edir, burada hər bir Managed Object dəyişikliklər üçün kontekst tərəfindən izlənir. Kontekst saxlanıldıqda, bütün dəyişdirilmiş, əlavə edilmiş və silinmiş obyektlər bir tranzaksiya ilə daimi anbarda təsdiqlənir. Bu, tərtibatçını SQL sorğuları yazmaqdan və tranzaksiyaları əl ilə idarə etməkdən azad edir.

Swift Developer Survey (2025) statistikasına görə, Core Data lokal məlumatlarla işləyən iOS tətbiqlərinin 52%-də istifadə olunur. Müasir alternativlərin (SwiftData, Realm) meydana çıxmasına baxmayaraq, Core Data yetkinliyi və sistemlə dərin inteqrasiyası sayəsində Apple-ın mövcud layihələrində əsas framework olaraq qalır.

Core Data-nı obyektlər arasında əlaqələr, dəyişikliklərin geri qaytarılması və faulting mexanizmi vasitəsilə avtomatik keşləmə tələb edən orta mürəkkəblikdə məlumat modeli layihələri üçün istifadə edin.

Core Data arxitekturası Managed Object Context konsepsiyası ətrafında qurulub — obyektlərdəki bütün dəyişiklikləri izləyən iş sahəsi. Kontekst daxili NSUndoManager vasitəsilə geri qaytarma (undo/redo) dəstəkləyir ki, bu da vəziyyət snapshot-larını əl ilə saxlamadan qaralama və əməliyyatların ləğvini həyata keçirməyə imkan verir. save() çağırıldıqda, kontekst bütün dəyişiklikləri bir tranzaksiya ilə daimi anbarda təsdiqləyir, atomarlıq və məlumat ardıcıllığını təmin edir.

Məlumat modeli: Entity, Attributes, Relationships

Core Data məlumat modeli .xcdatamodeld faylında — Xcode-un vizual redaktorunda təyin edilir, burada bütün Entity-lər, onların atributları və əlaqələri təsvir olunur. Kompilasiya zamanı model .momd-ə seriyalaşdırılır və NSManagedObjectModel vasitəsilə yüklənir.

Entity və Attributes

Entity — SQL-də cədvələ bənzər məlumat tipinin təsviridir. Hər Entity məlumat tipi (String, Integer, Date, Boolean, Data) olan adlandırılmış sahələr — Attributes dəsti ehtiva edir. Room-dan fərqli olaraq, Core Data hər bir atribut üçün model redaktoru vasitəsilə tipin açıq şəkildə seçilməsini tələb edir.

Relationships

Relationship — SQL-də xarici açar kimi Entity-lər arasında əlaqədir. Core Data bütün əlaqə növlərini dəstəkləyir: bir-birə, bir-çoxa və çox-çoxa. Hər bir əlaqə üçün Delete Rule (Cascade, Nullify, Deny) — əlaqəli obyekt silindikdə davranış konfiqurasiya edilir.

Delete RuleSilinmə zamanı davranışTətbiq nümunəsi
CascadeBütün əlaqəli obyektləri silirSifarişin mövqelərlə birlikdə silinməsi
NullifyƏks əlaqəni sıfırlayırKitabları silmədən müəllifin silinməsi
DenyƏlaqəli obyektlər varsa silməni bloklayırMəhsullarla kateqoriyanın silinməsindən qorunma

Delete Rule seçimi məlumat bütövlüyü üçün kritikdir: Cascade yoxlanılmadan bazanın üçdə birini silə bilər, Deny isə anlaşılmaz xəta ilə əməliyyatı bloklaya bilər. İstehsalat kodunda yetim qeydlərin əl ilə işlənməsi ilə Nullify tövsiyə olunur.

Xcode model redaktorunda tərtibatçı təkcə Entity və atributları deyil, həmçinin constraints (unikallıq məhdudiyyətləri), sorğuları sürətləndirmək üçün indekslər və atributlar üçün default values təyin edə bilər. Modeldəki bütün dəyişikliklər NSPersistentContainer-ın inisializasiyası zamanı yüklənən .momd faylına kompilə olunur. Model versiyalaşdırması (Model Versioning) sxemin bir neçə versiyasını saxlamağa və onlar arasında miqrasiya aparmağa imkan verir.

Core Data yığını: PersistentContainer və Context

NSPersistentContainer — iOS 10 və macOS 10.12-dən etibarən Core Data yığınını idarə edən vahid obyektdir. O, NSManagedObjectModel, NSPersistentStoreCoordinator və NSManagedObjectContext-i inkapsulyasiya edərək modelin yüklənməsini və anbar konfiqurasiyasını avtomatlaşdırır. Köhnə versiyalar üçün yığın əl ilə qurulurdu, lakin indi bu tövsiyə olunmur.

swift
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { _, error in
    if let error { fatalError("Core Data load failed: \(error)") }
}
let context = container.viewContext

viewContext — əsas ipliklə əlaqəli əsas kontekst. Bütün oxuma və UI yeniləmələri onun vasitəsilə həyata keçirilir. Məlumatların yazılması performans üçün uşaq tipli fon kontekstində sonrakı sinxronizasiya ilə yerinə yetirilməsi tövsiyə olunur.

NSPersistentStoreCoordinator

Koordinator NSPersistentStoreCoordinator modeli diskdəki fiziki anbarla əlaqələndirir. Core Data bir neçə anbar tipini dəstəkləyir: SQLite (tövsiyə olunan), Binary və In-Memory. SQLite anbarı miqrasiyaları, artımlı ehtiyat nüsxələri və yazma prosesində nasazlıqlara qarşı davamlılığı dəstəkləyir.

NSFetchRequest və məlumatlarla iş

NSFetchRequest — Core Data anbarına sorğunu təsvir edən obyektdir. O, Entity adını, filtrasiya predikatını, sıralamanı və gətirmə parametrlərini ehtiva edir. Sorğu context.fetch() vasitəsilə icra olunur və NSManagedObject massivi qaytarır.

swift
let request = NSFetchRequest<User>(entityName: "User")
request.predicate = NSPredicate(format: "age >= %d", 18)
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
request.fetchLimit = 50

let results = try context.fetch(request)

NSPredicate mürəkkəb şərtləri dəstəkləyir: LIKE, IN, BETWEEN, CONTAINS[c] (registr həssaslığı olmadan), əlaqəli Entity-lər üzrə iç-içə sorğular üçün SUBQUERY. Core Data həmçinin NSFetchedResultsController — UITableView-də reaktiv məlumat yükləmə sinfini dəstəkləyir, o, avtomatik olaraq dəyişiklikləri izləyir və cədvəli animasiya edilmiş bölmələrlə yeniləyir.

Çoxişlək mühitdə Core Data

Core Data ilə çoxişlək tətbiqdə iş qaydalara ciddi riayət etməyi tələb edir: NSManagedObject birbaşa ipliklər arasında ötürülə bilməz. Hər bir iplik (və ya növbə) öz kontekstindən istifadə etməlidir. Əsas yanaşma — yazmaq üçün şəxsi növbəli (NSPrivateQueueConcurrencyType) uşaq NSManagedObjectContext və oxumaq üçün viewContext yaratmaqdır.

Uşaq kontekst valideynə, valideyn isə diskdəki anbara yazılır. Bu, dəyişikliklərin əsas ipliyi bloklamamasını və UI-nin mergeChanges və ya yazma zamanı viewContext-in avtomatik yenilənməsi vasitəsilə həmişə ardıcıl vəziyyət görməsini təmin edir.

Core Data faulting — əlaqəli obyektlərin gecikmiş yüklənmə mexanizmindən istifadə edir. User sorğulanarkən onun addresses tələb olunmursa, əlaqəli Address-lər nöqtə notasiyası vasitəsilə müraciət edilənə qədər yüklənmir. Faulting yaddaşa qənaət edir və yükləməni sürətləndirir, lakin fon kontekstlərində girişə nəzarət edilmədikdə əsas iplikdə gözlənilməz disk müraciətlərinə səbəb ola bilər.

Səmərəli çoxişləklik üçün obyektləri yaddaşa yükləmədən kütləvi əlavə etmə və silmə üçün NSBatchInsertRequest və NSBatchDeleteRequest-dən istifadə edin — bu, serverlə məlumat sinxronizasiyası üçün kritikdir.

Batch əməliyyatları kontekst və obyekt qrafikini yan keçərək birbaşa NSPersistentStoreCoordinator səviyyəsində icra olunur. Bu, yaddaşda 10 000 NSManagedObject nümunəsi yaratmadan bir neçə millisaniyə ərzində 10 000 qeyd daxil etməyə imkan verir. Batch sorğusu icra edildikdən sonra UI-nin yeni məlumatları əks etdirməsi üçün kontekst mergeChangesFromContextDidSaveNotification vasitəsilə yenilənməlidir. Apple batch əməliyyatlarını ilkin məlumat yükləməsi və serverlə gecə sinxronizasiyası üçün tövsiyə edir.

Core Data-da dəyişiklikləri izləmək üçün NSPersistentHistoryTracking istifadə olunur — hər bir tranzaksiyanı (əlavə etmə, yeniləmə, silmə) ayrıca tarixçədə qeyd edən mexanizm. History tracking-in aktivləşdirilməsi eyni SQLite faylı ilə işləyən müxtəlif proseslər və tətbiqlər arasında məlumatları sinxronlaşdırmağa imkan verir, məsələn, əsas tətbiq və Notification Service Extension arasında. Aktivasiya persistentHistoryTrackingKey bayrağı ilə NSPersistentStoreDescription vasitəsilə, oxuma isə tarix və tranzaksiya növünə görə filtr ilə NSPersistentHistoryChangeRequest vasitəsilə həyata keçirilir.

Core Data performansının debug və profilinqi üçün macOS-da Xcode alətlər dəstindən Core Data Profiler istifadə olunur. O, bütün gətirmə, əlavə etmə, silmə və yazma əməliyyatlarını hər bir əməliyyatın müddəti və cədvəllərdə və zaman xətti qrafiklərində yüklənmiş obyektlərin sayı ilə göstərir. Tərtibatçı problemli sahələri müəyyən edə bilər: eyni sorğunun çoxsaylı gətirilmələri (keşləmənin olmaması), cədvəl sürüşdürmə zamanı fault-obyektlərin sızması və ya əlaqəli varlıqların sinxron yüklənməsi səbəbindən əsas ipliyin bloklanması. Profilinqin real cihazda aparılması tövsiyə olunur, simulyatorda deyil, çünki simulyatorun performansı iPhone və ya iPad-də tətbiqin real davranışını əks etdirmir.

Tez-tez verilən suallar

Core Data SQLite-dan nə ilə fərqlənir?

Core Data — verilənlər bazası deyil, SQLite-dan anbar kimi istifadə edə bilən obyekt idarəetmə təbəqəsidir. Birbaşa SQLite-dan fərqli olaraq, Core Data obyekt dəyişikliklərini izləyir, geri qaytarmaları idarə edir və faulting və keşləmə ilə obyekt qrafiki təmin edir. SQLite sorğular üzərində daha çox nəzarət verir, lakin SQL yazmağı və tranzaksiyaları əl ilə idarə etməyi tələb edir.

Core Data sxeminin miqrasiyasını necə aparmaq olar?

Core Data dağıdıcı olmayan dəyişikliklər üçün yüngül miqrasiyanı (Lightweight Migration) dəstəkləyir: atribut əlavə etmə, ad dəyişdirmə, standart dəyər təyinetmə. Mürəkkəb dəyişikliklər üçün Mapping Model yaradılır. Yüngül miqrasiya NSPersistentStoreDescription-da shouldMigrateAutomatically bayrağı ilə aktivləşdirilir.

Core Data-nı SwiftUI ilə istifadə etmək olarmı?

Bəli, Core Data SwiftUI ilə sorğular üçün @FetchRequest sarmaçısı və dəyişikliklərə abunə olmaq üçün @ObservedObject vasitəsilə inteqrasiya olunur. SwiftUI ManagedObject dəyişdikdə View-i avtomatik yeniləyir ki, bu da Core Data və SwiftUI-ni vəziyyətin idarə edilməsi üçün uyğun yığına çevirir.

Core Data-da fault nədir?

Fault — Core Data qrafikində əlaqəli obyektin məlumatlarını ehtiva etməyən yüngül tutucudur. Fault təyin edildikdə (refreshObject: vasitəsilə) məlumatlar yaddaşdan boşaldılır. Xassəyə müraciət edildikdə fault avtomatik olaraq anbardan məlumatlarla doldurulur — bu, yaddaş istifadəsini optimallaşdıran gecikmiş yükləmə mexanizmidir.

Core Data kodunu necə test etmək olar?

Test üçün In-Memory anbar tipindən istifadə edin: NSPersistentStoreDescription NSInMemoryStoreType ilə. Konteyner test paketindən model ilə yaradılır. Hər testdən sonra bütün obyektləri silin və ya konteyneri yenidən yaradın — bu, test hallarının bir-birindən təcrid olunmasını təmin edir.

Xülasə

  • Core Data — standart anbar kimi SQLite istifadə edən obyekt qrafiki idarəetmə framework-ü.
  • NSManagedObjectModel sxemi təsvir edir: Entity, Attributes, Relationships və Delete Rules.
  • NSPersistentContainer modeli, koordinatoru və viewContext-i vahid yığında birləşdirir.
  • NSFetchRequest NSPredicate və NSSortDescriptor ilə anbara çevik sorğular formalaşdırır.
  • Çoxişləklik ayrı kontekstlər tələb edir: yazmaq üçün uşaq kontekst və oxumaq üçün viewContext.
  • Faulting əlaqəli obyektlərin yüklənməsini ilk müraciətə qədər təxirə salır, yaddaşa qənaət edir.
  • Lightweight Migration məlumat itkisi olmadan dağıdıcı olmayan sxem dəyişikliklərini avtomatik idarə edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun