Middle+
Swiftda optional qanday xotirada saqlanadi?
sobes.tech AI
AIdan javob
Swift'da Optional, hafizada iki yolla saqlanadi:
-
_ObjectiveCBridgeableprotokoliga mos kelmaydigan turlar uchun: Kichik/Katta Optional Taqdimoti.- Kichik Optional: Agar qiymatning o'lchami ko'rsatilgan ko'rsatkich o'lchamidan kichik yoki teng bo'lsa, Optional, flag (Hozir/Yo'q) uchun bir bayt qo'shadi.
- Katta Optional: Agar qiymatning o'lchami ko'rsatilgan ko'rsatkich o'lchamidan katta bo'lsa, Optional, xotirada ikki "joy" ishlatadi: biri qiymat uchun (agar mavjud bo'lsa) va biri mavjudlik flagi uchun. Bu, yoki ikki qator xotira bo'laklari yoki, murakkab hollarda, heap'da ajratilgan qiymatga havola bo'lishi mumkin.
-
_ObjectiveCBridgeableprotokoliga mos keladigan turlar uchun (masalan, sinflar, ba'zi tuzilmalar): Nullable Pointer Taqdimoti.- Agar tur sinf bo'lsa yoki Objective-C ko'rsatilishi sifatida taqdim etilishi mumkin bo'lsa, Optional, pointer
nilbo'lishi mumkinligini ishlatadi. Bu holatda,nilOptional'da null pointer sifatida taqdim etiladi, vanil emasOptional, ob'ektga pointer sifatida taqdim etiladi. Bu, xotira nuqtai nazaridan, samaraliroq, chunki qo'shimcha flag talab qilmaydi.
- Agar tur sinf bo'lsa yoki Objective-C ko'rsatilishi sifatida taqdim etilishi mumkin bo'lsa, Optional, pointer
Xulosa qilib aytganda, Optional, asosiy turdan biroz ko'proq joy olishi mumkin (Kichik/Katta Optional), yoki pointer bilan bir xil joyni egallashi mumkin (Nullable Pointer). Aniq taqdimot, tur va uning nullable-pointer sifatida taqdim etilishi qobiliyatiga qarab, kompilator tomonidan belgilanadi.
// Misol: Int `_ObjectiveCBridgeable` emas, Kichik/Katta Optional ishlatadi
var maybeInt: Int? = 10 // Kichik Optional bo'lishi mumkin
// Misol: String `_ObjectiveCBridgeable`, Nullable Pointer ishlatishi mumkin
var maybeString: String? = "Hello" // Nullable Pointer bo'lishi mumkin
// Misol: Protokol (Any) `_ObjectiveCBridgeable` emas, Kichik/Katta Optional ishlatadi
var maybeAny: Any? = 5 // Kichik/Katta Optional