Middle
როგორ ინახება ხედი, რომელიც არის მიმთითებლის ტიპი?
sobes.tech AI
პასუხი AI-სგან
iOS-ում (UIView և նրա ենթակլասներ) տեսականիները դասեր են, հետևաբար՝ հղման տիպեր։ Դրանց պահպանումը կատարվում է հետևյալ մեխանիզմների միջոցով:
-
Հզոր հղումներ (Strong References):
- Դրանք ստեղծվում են ըստ默认, եթե հայտարարում եք հատկություն UIView-ի համար առանց
weakկամunownedնշիչների, դա ստեղծում է հզոր հղում: - Հզոր հղումը ավելացնում է օբյեկտի հղման հաշվիչը։ Օբյեկտը չի ջնջվի հիշողությունից, քանի դեռ կա առնվազն մեկ հզոր հղում։
- Սա ստանդարտ մեթոդն է տեսքի պահպանումը, երբ անհրաժեշտ է, որ այն մնա հիշողության մեջ և հասանելի լինի։
//Հզոր հղում var myView: UIView = UIView() - Դրանք ստեղծվում են ըստ默认, եթե հայտարարում եք հատկություն UIView-ի համար առանց
-
Ազոր հղումներ (Weak References):
- Հայտարարում են
weakբանալիով։ - Ազոր հղումը չ ավելացնում է օբյեկտի հղման հաշվիչը։
- Ազոր հղումները չ կանխում են օբյեկտի հեռացումը հիշողությունից, եթե այլ հզոր հղումներ չեն մնացել։
- Օգտագործվում են հզոր հղումների ցիկլերը կանխելու համար, սովորական իրավիճակ է ծնող-մեկուսական հարաբերությունը, որտեղ ծնողը ունի հզոր հղում երեխային, իսկ երեխան կարող է ունենալ հղում ծնողին։ Այդ դեպքում, հակադարձ հղումը պետք է լինի անզոր։
- Ազոր հղումները պետք է լինեն ընտրովի (
Optional), քանի որ օբյեկտը կարող է ջնջվել, և հղումը կդառնաnil։
weak var parentView: UIView? - Հայտարարում են
-
Unowned հղումներ (Unowned References):
- Հայտարարում են
unownedբանալիով։ - Ինչպես և անզոր հղումները, չեն ավելացնում հղման հաշվիչը։
- Տարբերություն: հակառակ
weak-ի, unowned հղումները չ են ընտրովի։ Դրանք ենթադրում են, որ օբյեկտը կշարունակի գոյություն ունենալ այնքան ժամանակ, որքան կա հղում։ Եթե փորձեք հասնել օբյեկտին unowned հղմամբ, երբ այն արդեն ազատ է արձակվել, ծրագիրը կկոտրվի։ - Օգտագործվում են, երբ վստահ եք, որ կյանքի ցիկլը չի գերազանցում օբյեկտի կյանքի ցիկլը, որի վրա հղում է։ Վիզուալների կոնտեքստում դա ավելի քիչ տարածված է, քան
weak։
//Ամենայն հավանականությամբ less common for views, but possible unowned var childView: UIView - Հայտարարում են
-
Արrey և հավաքածուներ:
- Վահանակների պահպանումը տեսքերին՝
Array,DictionaryկամSet-ում, նույնպես ըստ默认 ստեղծում է հզոր հղումներ։
var subviews: [UIView] = [] - Վահանակների պահպանումը տեսքերին՝
Ընտրությունը հզոր, անզոր կամ unowned հղում ընտրելու համար կախված է կոնկրետ օգտագործման սցենարից և օբյեկտների կյանքի ցիկլի կառավարմանց, որպեսզի կանխվի հիշողության լիքերը։ SwiftUI-ում տեսքերի կյանքի ցիկլի կառավարման գաղափարները մի փոքր տարբեր են, բայց UIKit-ի կոնտեքստում այս մեխանիզմները մնում են հիմնական մեթոդը հղումների պահպանումը։