# UIKit 9: UIKit va SwiftUI Chuqur Suhbat Savollari — 40+ Professional Savol va Javoblar

Ushbu darsda Middle, Senior va Lead darajadagi iOS dasturchilar texnik intervyusida (Technical Interview) so'raladigan **40 dan ortiq eng chuqur va dolzarb savollar hamda ularning aniq, o'lchangan faktlarga asoslangan javoblari** jamlangan. Har bir mavzu bo'yicha batafsil bilim olish uchun tegishli darslarga to'g'ridan-to'g'ri havolalar berilgan.

---

## 1. UIView, CALayer va Koordinatalar Tizimi

### 1. UIView va CALayer o'rtasidagi asosiy farq nima va nega Apple ularni ikkiga ajratgan?
**Javob:**
`UIView` — bu interaktivlik, foydalanuvchi teginishlari (touch handling), Accessibility va avtomatik joylashuv (Auto Layout) bilan ishlovchi boshqaruvchi qobiqdir. U `UIResponder` sinfidan meros oladi.
`CALayer` esa Core Animation qatlamida turadi va bevosita GPU orqali piksellarni ekranga chizish (rendering) uchun javobgardir. Layer teginishlarni (touch events) qabul qilmaydi.
Apple ularni ajratganining sababi — **kodni qayta ishlatish va javobgarlikni ajratishdir**: macOS (`NSView`) va iOS (`UIView`) butunlay boshqacha interaktivlikka ega (sichqoncha kursoriga nisbatan barmoq teginishi), biroq ularning ikkalasi ham GPU chizish uchun bir xil `CALayer` texnologiyasidan foydalanadi.
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

### 2. `frame` va `bounds` o'rtasidagi farq nima? Ob'ekt 45 gradusga aylantirilganda (rotation) ulardan qaysi biri o'zgaradi?
**Javob:**
- `frame` — ota view (superview) koordinatalar tizimidagi joylashuv (`origin`) va o'lcham (`size`). U view'ning butun tashqi chegarasini o'z ichiga oluvchi to'g'ri to'rtburchakdir (bounding box).
- `bounds` — view'ning o'z ichki koordinatalar tizimidagi joylashuvi va o'lchami.
Agar view'ga 45 graduslik `transform` berilsa, uning `bounds.size` o'zgarmasdan qoladi, lekin `frame.size` aylanma figurani to'liq sig'dirish uchun sezilarli darajada kattalashadi.
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

### 3. Agar `view.bounds.origin` qiymatini `(x: 50, y: 50)` ga o'zgartirsak, uning subview'lari qayerga qarab siljiydi?
**Javob:**
Uning subview'lari ekranda **chapga va yuqoriga (manfiy yo'nalishda 50 pikselga)** siljiydi. 
Chunki `bounds.origin` — bu view o'zining ichki koordinata qog'ozining qaysi nuqtasini ko'rsatish oynasi (viewport) sifatida qarayotganini bildiradi. Oynani `(50, 50)` nuqtaga surish kontentni teskari tomonga suradi. `UIScrollView` aynan mana shu mexanizm asosida ishlaydi (`contentOffset` aslida `bounds.origin` ustiga qurilgan).
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

### 4. `hitTest(_:with:)` algoritmi qanday ishlaydi va qaysi holatlarda view teginishni qabul qilmaydi?
**Javob:**
`hitTest` eng chuqur subview'dan boshlab "teskari ierarxiya" (reverse depth-first traversal) bo'yicha teginish nuqtasini qidiradi.
View quyidagi 4 holatda zudlik bilan `nil` qaytaradi va o'z subview'larini ham tekshirmaydi:
1. `isUserInteractionEnabled == false`
2. `isHidden == true`
3. `alpha < 0.01`
4. `point(inside:with:) == false` (ya'ni teginish nuqtasi view chegarasidan tashqarida).
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

### 5. Subview ota view chegarasidan (`bounds`) tashqariga chiqib tursa (`clipsToBounds == false`), unga teginish bosiladimi?
**Javob:**
**Yo'q, bosilmaydi!** Sababi, `hitTest` algoritmi avval ota view'ning `point(inside:with:)` metodini tekshiradi. Agar nuqta ota view chegarasidan tashqarida bo'lsa, ota view darhol `nil` qaytaradi va subview ko'rinib turgan bo'lsa ham, unga teginish hodisasi yetib bormaydi. Buni to'g'rilash uchun ota view'ning `point(inside:with:)` metodini override qilib, teginish doirasini kengaytirish kerak.
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

### 6. Responder Chain nima va teginish hodisasi qanday marshrut bo'yicha uzatiladi?
**Javob:**
Responder Chain — bu `UIResponder` ob'ektlari ierarxiyasi bo'lib, voqealarni (touch, motion, remote-control) qayta ishlovchi topilguniga qadar zanjir bo'ylab yuqoriga uzatadi:
`First Responder (eng chuqur UIView) -> superview -> ... -> UIViewController -> UIWindow -> UIWindowScene -> UIApplication -> UIApplicationDelegate`.
Agar hech kim hodisani qabul qilmasa, u e'tiborsiz tashlab yuboriladi.
- [Batafsil: UIKit 1 — View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)

---

## 2. Layout, Rendering va Auto Layout

### 7. RunLoop va Layout Cycle o'rtasidagi bog'liqlik qanday? Update coalescing nima?
**Javob:**
RunLoop foydalanuvchi teginishlari, tarmoq javoblari va taymerlarni ishlab bo'lgach, har bir aylanish oxirida **Display Pass** (chizish bosqichi)ni amalga oshiradi.
Agar bitta tsikl davomida `setNeedsLayout()` 100 marta chaqirilsa ham, tizim darhol 100 marta qayta hisoblamaydi. U barchasini bitta bayroqcha bilan belgilaydi va navbatdagi Display Pass vaqtida `layoutSubviews()`ni **faqat bir marta** chaqiradi. Bu mexanizm **Update Coalescing** (yangilanishlarni birlashtirish) deyiladi.
- [Batafsil: UIKit 2 — Layout va Render Sikli](/ios-lessons/uikit-layout-cycle)

### 8. `setNeedsLayout()` va `layoutIfNeeded()` farqi nima?
**Javob:**
- `setNeedsLayout()` — asinxron bo'lib, view'ni "qayta hisoblash kerak" deb belgilab qo'yadi. Qayta hisoblash navbatdagi RunLoop aylanishida sodir bo'ladi.
- `layoutIfNeeded()` — sinxron (darhol) chaqiruvdir. Agar view "ifloslangan" (ya'ni `setNeedsLayout` chaqirilgan) bo'lsa, u kutib o'tirmasdan shu zahotiyoq `layoutSubviews()`ni ishga tushiradi. Animatsiyalar (masalan, constraint o'zgarishini animatsiya qilish) aynan `layoutIfNeeded` yordamida amalga oshiriladi.
- [Batafsil: UIKit 2 — Layout va Render Sikli](/ios-lessons/uikit-layout-cycle)

### 9. iOS 26 da taqdim etilgan yangi `updateProperties()` metodi nima va u qachon ishlaydi?
**Javob:**
`updateProperties()` — iOS 26 da `UIView` va `UIViewController`ga qo'shilgan yangi metod bo'lib, u bevosita `layoutSubviews()` chaqirilishidan sal oldin ishlaydi. 
Uning asosiy xususiyati — u **layout tizimidan mustaqil** ishlaydi. Ya'ni elementlarning vizual xususiyatlarini (ranglar, shaffoflik, matnlar) yangilash uchun butun Auto Layout dvigatelini qayta ishga tushirish talab etilmaydi.
- [Batafsil: UIKit 2 — Layout va Render Sikli](/ios-lessons/uikit-layout-cycle)

### 10. Auto Layout tizimidagi Content Hugging va Compression Resistance farqi nimada?
**Javob:**
- **Content Hugging Priority (CHP):** "Meni o'z o'lchamimdan kattalashtirib yuborma!" (Antistretching). Prioritet qanchalik yuqori bo'lsa, element o'zining tabiiy `intrinsicContentSize`idan tashqariga shunchalik kamroq cho'ziladi.
- **Content Compression Resistance Priority (CCRP):** "Meni o'z o'lchamimdan kichik qilib siqib qo'yma!" (Antishrinking). Prioritet qanchalik yuqori bo'lsa, element o'z kontentini qisqartirib yuborishdan shunchalik qattiq himoyalanadi.
- [Batafsil: UIKit 2 — Layout va Render Sikli](/ios-lessons/uikit-layout-cycle)

### 11. ProMotion (120Hz) displeylarida animatsiya silliqligini ta'minlash uchun qaysi vositadan foydalaniladi?
**Javob:**
`CADisplayLink` vositasi orqali. iOS 15 dan boshlab `preferredFrameRateRange` (masalan, min: 60, preferred: 120, max: 120) orqali kadrlar tezligini dinamik sozlash mumkin. 
iPhone'da 120Hz to'liq ishlashi uchun `Info.plist` da `CADisableMinimumFrameDurationOnPhone` kaliti `true` qilib ko'rsatilishi shart (iPad Pro'da bu talab qilinmaydi).
- [Batafsil: UIKit 5 — Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)

---

## 3. UIViewController va Arxitektura

### 12. `viewIsAppearing(_:)` metodi qachon chaqiriladi va nega `viewWillAppear` o'rniga tavsiya etiladi? Qaysi tizimga backdeploy qilingan?
**Javob:**
`viewIsAppearing(_:)` — `viewWillAppear`dan keyin, lekin `viewDidAppear`dan oldin chaqiriladi. Eng muhim jihati: u chaqirilgan vaqtda view ierarxiyasi oynaga (window) allaqachon qo'shilgan bo'ladi va uning **aniq o'lchamlari va trait parametrlari to'liq ma'lum bo'ladi**.
`viewWillAppear`da esa view o'lchamlari hali ota oyna darajasida hisoblab chiqilmagan bo'ladi.
Apple bu metodni iOS 13.0+ (va iPadOS 13, tvOS 13) gacha backdeploy qilgan.
- [Batafsil: UIKit 3 — View Controller Hayot Sikli](/ios-lessons/uikit-vc-lifecycle)

### 13. Container View Controller yaratishda qaysi 4 ta metod chaqirilishi shart?
**Javob:**
1. `addChild(childVC)` — ota-bola munosabatini o'rnatadi;
2. `view.addSubview(childVC.view)` — ko'rinish ierarxiyasiga qo'shadi;
3. `childVC.view.frame = ...` yoki Auto Layout constraint'larni ulash;
4. `childVC.didMove(toParent: self)` — bolaga ko'chish yakunlanganini xabar qiladi.
O'chirishda esa teskari tartibda: `willMove(toParent: nil)`, `removeFromSuperview()`, `removeFromParent()`.
- [Batafsil: UIKit 3 — View Controller Hayot Sikli](/ios-lessons/uikit-vc-lifecycle)

### 14. iOS 27 da `UIScreen.main` nega taqiqlangan va uning o'rniga nima ishlatiladi?
**Javob:**
Zamonaviy iOS'da bitta ilova ko'p oynali rejimda (Multi-window, iPad Stage Manager, Mac Mirroring yoki tashqi monitor ulanishi) ishlashi mumkin. `UIScreen.main` har doim asosiy jismoniy ekranni qaytaradi, bu esa tashqi displeyga ulanganda xato o'lchamlarga olib keladi.
iOS 27 da `UIScreen.main` rasman eskirgan bo'lib, o'rniga quyidagilar ishlatiladi:
`view.window?.windowScene?.screen` yoki trait collection orqali `traitCollection.displayScale`.
- [Batafsil: UIKit 3 — View Controller Hayot Sikli](/ios-lessons/uikit-vc-lifecycle)

### 15. iOS 27 da `UIScene` lifecycle majburiyligi nimani anglatadi?
**Javob:**
WWDC26 #278 da Apple qat'iy e'lon qildi: yangi SDK'lar bilan kompilyatsiya qilinganda `UIScene` ierarxiyasi (SceneDelegate) bo'lmagan, faqat eski `AppDelegate.window`ga tayanuvchi ilovalar **umuman ishga tushmaydi (will no longer launch)**.
- [Batafsil: UIKit 3 — View Controller Hayot Sikli](/ios-lessons/uikit-vc-lifecycle)

---

## 4. Xotira Boshqaruvi va ARC (Memory Deep)

### 16. ARC da `weak` va `unowned` o'rtasidagi texnik farq nima?
**Javob:**
- `weak` — xotiradagi ob'ektga zaif havola. Ob'ekt deallocate bo'lganda, runtime uning ko'rsatkichini avtomatik ravishda `nil` ga aylantiradi (zeroing weak reference). Shuning uchun `weak` har doim Optional bo'ladi (`var x: Object?`).
- `unowned` — ob'ektga zaif bo'lmagan, lekin hisoblagichni oshirmaydigan havola. Ob'ekt o'chganda ko'rsatkich `nil`ga aylanmaydi. Agar o'chgan ob'ektga murojaat qilinsa, Swift runtime qat'iy xatolik berib qulaydi (`Fatal error: Attempted to read an unowned reference...`).
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

### 17. NotificationCenter'da qachon `removeObserver` chaqirish shart va qachon shart emas?
**Javob:**
- **Target/Selector (`addObserver(_:selector:...)`):** iOS 9.0+ dan boshlab tizim `deinit` paytida avtomatik tarzda tozalaydi, qo'lda `removeObserver` yozish shart emas.
- **Block-based (`addObserver(forName:...)`):** Ob'ekt deallocate bo'lishidan oldin **albatta** qaytarilgan `NSObjectProtocol` tokenini `NotificationCenter.default.removeObserver(token)` orqali o'chirish shart! Aks holda xotira sizishi (memory leak) ro'y beradi.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

### 18. `didReceiveMemoryWarning()` metodi iOS'da deprecated bo'lganmi?
**Javob:**
**Yo'q, deprecated EMAS!** Bu keng tarqalgan mifik xato da'vodir. Ushbu metod iOS 2.0 dan buyon mavjud va hozirgi iOS 26/27 da ham to'liq faol. Tizim xotira yetishmovchiligiga duch kelganda har bir faol View Controller'ga ogohlantirish yuborishda davom etadi.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

### 19. `os_proc_available_memory()` nima va undan qanday foydalaniladi?
**Javob:**
`extern size_t os_proc_available_memory();` (iOS 13.0+) — joriy ilovaga tizim tomonidan ajratilishi mumkin bo'lgan qolgan taxminiy baytlar miqdorini qaytaruvchi C funksiyasi.
Apple rasmiy hujjatida ta'kidlanganidek, bu raqam **maslahat xarakteriga ega (advisory only)**, uni keshlash mumkin emas va butun xotirani to'ldirish maqsadida foydalanmaslik kerak.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

### 20. Copy-on-Write (CoW) nima va `isKnownUniquelyReferenced` qanday ishlaydi?
**Javob:**
CoW — Swift'dagi qiymat turlarining (Array, Dictionary, String) xotira samaradorligi mexanizmi. Bir massiv ikkinchisiga o'zlashtirilganda, ma'lumotlar darhol nusxalanmaydi, ikkala o'zgaruvchi ham bitta xotira buferiga ko'rsatib turadi. Faqat nusxalardan biri o'zgartirilganda (`mutating` amalida), unga alohida xotira ajratiladi.
Swift ichida bu `isKnownUniquelyReferenced(&ref)` orqali tekshiriladi: agar havola yagona bo'lsa, xotira ajratilmasdan joyida o'zgartiriladi.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

### 21. `autoreleasepool` qanday hollarda ishlatilishi shart?
**Javob:**
Katta hajmdagi sikllarda (masalan, 10,000 ta tasvirni qayta ishlash yoki fayllarni o'qishda). RunLoop tsikli tugamaguniga qadar autoreleased ob'ektlar xotiradan bo'shatilmaydi va bu xotira portlashiga (OOM crash) sabab bo'ladi. `autoreleasepool { ... }` har bir sikl qadamida o'tkinchi xotirani shu zahoti tozalab turadi.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

---

## 5. Apple Hardware va Qurilmalar

### 22. `scale` va `nativeScale` o'rtasidagi farq nima? Qaysi iPhone'larda ular farq qiladi?
**Javob:**
- `scale` — mantiqiy nuqtalar (points) va chizilgan render piksellari o'rtasidagi nisbat (odatda 2.0x yoki 3.0x).
- `nativeScale` — qurilmaning haqiqiy jismoniy ekran matritsasiga to'g'ri keluvchi piksellar nisbati.
Klassik misol: iPhone 6+/7+/8+ da dastur 3.0x (1242×2208) bo'yicha render qilinib, keyin ekran apparati tomonidan jismoniy 1080×1920 ga tushirilgan (downsampling), bunda `scale = 3.0`, `nativeScale ≈ 2.608` bo'lgan. Zamonaviy OLED iPhone'larda esa ular deyarli har doim bir xil (3.0).
- [Batafsil: UIKit 5 — Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)

### 23. `ProcessInfo.ThermalState` qanday holatlarni o'z ichiga oladi va dasturchi unga qanday munosabat bildirishi kerak?
**Javob:**
To'rtta holat: `.nominal`, `.fair`, `.serious`, `.critical`.
`.serious` va `.critical` holatlarida ilova render kadrlar chastotasini (FPS) 60 yoki 30 ga tushirishi, fon yuklamalarini to'xtatishi va murakkab hisob-kitoblarni bekor qilishi lozim, aks holda OS ilovani majburan yopadi.
- [Batafsil: UIKit 5 — Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)

### 24. Apple Intelligence funksiyalarini ishlatish uchun minimal apparat talablari qanday?
**Javob:**
- iPhone: iPhone 15 Pro / iPhone 15 Pro Max (A17 Pro chipi) va undan keyingi modellar (iPhone 16, 17, 18 seriyalari).
- iPad / Mac: Apple Silicon M1 va undan yangi chiplar.
- Xotira: Ba'zi murakkab lokal AI modellar minimal **12GB birlashgan xotira (unified memory)** talab qiladi.
- [Batafsil: UIKit 5 — Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)

### 25. iOS 26 dan iOS 27 ga o'tishda qaysi iPad qurilmalari yangilanishdan mahrum bo'ldi?
**Javob:**
Rasmiy xavfsizlik va reliz hujjatlariga ko'ra, aniq **5 ta iPad modeli** tizimdan tushib qoldi:
1. iPad Pro 12.9 dyuym (3-avlod)
2. iPad Pro 11 dyuym (1-avlod)
3. iPad Air (3-avlod)
4. iPad (8-avlod)
5. iPad mini (5-avlod).
(iPhone modellari uchun chegara o'zgarmadi: iPhone 11 va undan yangilari qo'llab-quvvatlanadi).
- [Batafsil: UIKit 5 — Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)

---

## 6. iOS 26 va iOS 27 Yangiliklari

### 26. iOS 26 ning "Liquid Glass" dizayn tili UIKit'da qaysi API orqali taqdim etilgan?
**Javob:**
`UIGlassEffect` sinfi orqali:
```swift
import UIKit

@available(iOS 26.0, *)
@MainActor
public func configureGlassView() -> UIView {
  let glass = UIGlassEffect(style: .regular)
  let effectView = UIVisualEffectView(effect: glass)
  return effectView
}
```
Tugmalar uchun esa tayyor konfiguratsiya mavjud: `UIButton.Configuration.glass()`.
Ushbu API iOS, iPadOS, macOS va tvOS'da mavjud (lekin watchOS va visionOS'da yo'q).
- [Batafsil: UIKit 6 — iOS 26 va iOS 27 Yangiliklari](/ios-lessons/ios-26-27-whats-new)

### 27. iOS 27 da SwiftUI `@State` xususiyati qanday fundamental o'zgarishga uchradi?
**Javob:**
iOS 27 da `@State` property wrapper mexanizmidan **Swift Syntax Macro** asosidagi zamonaviy tizimga aylantirildi. Bu orqali xotira ajratilishi tejaladi va View strukturasining ichki hajmi (layout size) sezilarli darajada kichrayadi.
- [Batafsil: UIKit 6 — iOS 26 va iOS 27 Yangiliklari](/ios-lessons/ios-26-27-whats-new)

### 28. iOS 27 da NavigationBar minimallashtirish qanday boshqariladi?
**Javob:**
`navigationItem.navigationBarMinimization` xususiyati orqali. Dasturchi foydalanuvchi pastga aylantirganda sarlavha va qidiruv panelining qanday qisqarishini (minimization behavior) va uning safe area'ga ta'sirini nozik boshqara oladi.
- [Batafsil: UIKit 6 — iOS 26 va iOS 27 Yangiliklari](/ios-lessons/ios-26-27-whats-new)

---

## 7. SwiftUI Chuqur va Interop

### 29. SwiftUI da "View Identity" turlari qaysilar va ularning farqi nima?
**Javob:**
1. **Explicit Identity (Aniq identifikatsiya):** Ob'ektga `.id("noyob_kalit")` orqali yoki `Identifiable` protokoli yordamida berilgan identifikator.
2. **Structural Identity (Strukturaviy identifikatsiya):** View'ning ko'rinishlar daraxtidagi joylashuv o'rni. Agar `if/else` shoxlanishi ishlatilsa, SwiftUI ikkita butunlay boshqa ko'rinish deb qaraydi va holatni (State) nollaydi.
- [Batafsil: SwiftUI Chuqur: Arxitektura va Samaradorlik](/ios-lessons/swiftui-deep)

### 30. `@Observable` (iOS 17+) eski `ObservableObject`dan nima bilan farq qiladi?
**Javob:**
`ObservableObject`da bitta `@Published` maydon o'zgarsa ham, butun view to'liq qayta hisoblanadi.
`@Observable` makrosi esa **Property-level tracking** (maydon darajasidagi kuzatuv) olib boradi. Agar View faqat `user.name`ni o'qiyotgan bo'lsa, `user.age` o'zgarganda ushbu View qayta chizilmaydi!
- [Batafsil: SwiftUI Chuqur: Arxitektura va Samaradorlik](/ios-lessons/swiftui-deep)

### 31. `_printChanges()` nima va u qanday ishlatiladi?
**Javob:**
`Self._printChanges()` — SwiftUI `body` ichida chaqiriladigan yashirin nosozliklarni aniqlash (debugging) metodidir. U konsolda ko'rinish qaysi `@State` yoki `@Binding` o'zgarishi tufayli qayta hisoblanayotganini aniq ko'rsatib beradi:
`UserProfileView: _name changed.`
- [Batafsil: SwiftUI Chuqur: Arxitektura va Samaradorlik](/ios-lessons/swiftui-deep)

### 32. UIKit ro'yxat katakchasida SwiftUI ko'rinishini eng toza integratsiya qilish usuli nima?
**Javob:**
iOS 16 da taqdim etilgan **`UIHostingConfiguration`** orqali:
```swift
import SwiftUI
import UIKit

@MainActor
public func configureCell(cell: UITableViewCell) {
  cell.contentConfiguration = UIHostingConfiguration {
    Text("SwiftUI View in UITableViewCell")
  }
}
```
Bu eski `UIHostingController`ni subview qilib qo'shish usulidan ancha tezroq va xotira tejamkor hisoblanadi.
- [Batafsil: SwiftUI Chuqur: Arxitektura va Samaradorlik](/ios-lessons/swiftui-deep)

---

## 8. Real Nosozliklar, Crashlar va Concurrency Yechimlari

### 33. Swift 6 da `error: main actor-isolated property can not be mutated from a nonisolated context` xatosi qanday tuzatiladi?
**Javob:**
`Task.detached` yoki fon oqimidan turib `@MainActor` mulkini o'zgartirish o'rniga, `await MainActor.run { ... }` orqali bosh aktyorga o'tish yoki strukturaviy `Task { @MainActor in ... }` ishlatiladi.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 34. Swift 6 dagi `[#SendingRisksDataRace]` xatosi nimani anglatadi?
**Javob:**
Thread-safe bo'lmagan (non-Sendable) mos yozuvlar sinfi ob'ekti bir oqimdan ikkinchi oqimga uzatilayotganini bildiradi. Yechim: sinf o'rniga `struct` (Sendable) ishlatish yoki sinfni `actor` ga aylantirish.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 35. `Fatal error: Attempted to read an unowned reference but object was already destroyed` sababi nima?
**Javob:**
`unowned` ko'rsatkich bilan bog'langan ob'ekt xotiradan o'chib ketgan, biroq uning maydoniga murojaat qilingan. Ob'ektlarning hayot davri mutlaq bir vaqtda tugashiga to'liq kafolat bo'lmasa, har doim `weak` ishlatish shart.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 36. Auto Layout'da constraint ziddiyatlari ro'yxatida `0x60000...` o'rniga tushunarli matn chiqishi uchun nima qilish kerak?
**Javob:**
Constraint yaratilayotganda unga `identifier` berish kerak:
`constraint.identifier = "Header_Height_50"`.
Shunda xatolik jurnali qaysi cheklov ziddiyatga sabab bo'lganini yaqqol ko'rsatadi.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 37. Klaviaturani ekran pastidagi elementlarga to'qnashmasligi uchun iOS 15+ da qaysi standart qo'llanma tavsiya etiladi?
**Javob:**
`view.keyboardLayoutGuide`.
Elementning pastki chegarasini `view.keyboardLayoutGuide.topAnchor`ga bog'lash kifoya, notification'lar tinglash shart emas.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 38. `prepareForReuse()` da asinxron yuklashlarni bekor qilish (`cancel()`) nega majburiy?
**Javob:**
Aks holda foydalanuvchi ro'yxatni tez varaqlaganda, oldingi satr uchun yuklangan rasm yangi kelgan boshqa katakchaga chizilib qoladi (data leak / inconsistent state).
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 39. Main Thread Checker xatosi qachon yuz beradi?
**Javob:**
UIKit elementlarining vizual xususiyatlari (matn, rang, frame, `setNeedsLayout`) fon oqimidan (background GCD queue yoki detached task) turib chaqirilganda.
- [Batafsil: UIKit 8 — Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)

### 40. Swift 6.2 da xotira sarfini kamaytirish uchun qanday yangi turlar taqdim etildi?
**Javob:**
WWDC25 #312 da taqdim etilgan xavfsiz va to'g'ridan-to'g'ri xotiraga murojaat qiluvchi **Span** turlari (`Span`, `RawSpan`, `OutputSpan`) hamda yig'indisi stekda saqlanuvchi **InlineArray**. Ular ortiqcha nusxalashlarsiz yuqori unumdorlikni beradi.
- [Batafsil: UIKit 4 — Xotira va ARC](/ios-lessons/uikit-memory)

---

## Suhbatdan Muvaffaqiyatli O'tish Bo'yicha Maslahatlar

1. **"Nega?" degan savolga javob bering:** Shunchaki metod nomini aytish yetarli emas — Apple uni nega yaratgani va kapot ostida nima sodir bo'lishini tushuntiring.
2. **Zamonaviy standartlarni biling:** iOS 26/27, Swift 6 Concurrency va `@Observable` kabi yangiliklarni bilish sizni oddiy ishlab chiquvchilardan darhol ajratib ko'rsatadi.
3. **Faktlarga tayaning:** O'ylab topilgan taxminlar o'rniga, Apple'ning rasmiy hujjatlari va o'lchangan ko'rsatkichlarini keltiring.

---

## Barcha Darslar Ro'yxati
- [UIKit 1: View Ierarxiyasi va Koordinatalar Tizimi](/ios-lessons/uikit-view-hierarchy)
- [UIKit 2: Layout va Render Sikli](/ios-lessons/uikit-layout-cycle)
- [UIKit 3: View Controller Hayot Sikli](/ios-lessons/uikit-vc-lifecycle)
- [UIKit 4: Xotira va ARC](/ios-lessons/uikit-memory)
- [UIKit 5: Apple Qurilmalari Dasturchilar Uchun](/ios-lessons/apple-devices)
- [UIKit 6: iOS 26 va iOS 27 Yangiliklari](/ios-lessons/ios-26-27-whats-new)
- [UIKit 7: SwiftUI Chuqur: Arxitektura va Samaradorlik](/ios-lessons/swiftui-deep)
- [UIKit 8: Real Crash, Concurrency va Memory Buglar](/ios-lessons/uikit-problems-solutions)
