Sobes.tech
Middle

როგორ ინახება ხედი, რომელიც არის მიმთითებლის ტიპი?

sobes.tech AI

პასუხი AI-სგან

iOS-ում (UIView և նրա ենթակլասներ) տեսականիները դասեր են, հետևաբար՝ հղման տիպեր։ Դրանց պահպանումը կատարվում է հետևյալ մեխանիզմների միջոցով:

  1. Հզոր հղումներ (Strong References):

    • Դրանք ստեղծվում են ըստ默认, եթե հայտարարում եք հատկություն UIView-ի համար առանց weak կամ unowned նշիչների, դա ստեղծում է հզոր հղում:
    • Հզոր հղումը ավելացնում է օբյեկտի հղման հաշվիչը։ Օբյեկտը չի ջնջվի հիշողությունից, քանի դեռ կա առնվազն մեկ հզոր հղում։
    • Սա ստանդարտ մեթոդն է տեսքի պահպանումը, երբ անհրաժեշտ է, որ այն մնա հիշողության մեջ և հասանելի լինի։
    //Հզոր հղում
    var myView: UIView = UIView()
    
  2. Ազոր հղումներ (Weak References):

    • Հայտարարում են weak բանալիով։
    • Ազոր հղումը չ ավելացնում է օբյեկտի հղման հաշվիչը։
    • Ազոր հղումները չ կանխում են օբյեկտի հեռացումը հիշողությունից, եթե այլ հզոր հղումներ չեն մնացել։
    • Օգտագործվում են հզոր հղումների ցիկլերը կանխելու համար, սովորական իրավիճակ է ծնող-մեկուսական հարաբերությունը, որտեղ ծնողը ունի հզոր հղում երեխային, իսկ երեխան կարող է ունենալ հղում ծնողին։ Այդ դեպքում, հակադարձ հղումը պետք է լինի անզոր։
    • Ազոր հղումները պետք է լինեն ընտրովի (Optional), քանի որ օբյեկտը կարող է ջնջվել, և հղումը կդառնա nil։
    weak var parentView: UIView?
    
  3. Unowned հղումներ (Unowned References):

    • Հայտարարում են unowned բանալիով։
    • Ինչպես և անզոր հղումները, չեն ավելացնում հղման հաշվիչը։
    • Տարբերություն: հակառակ weak-ի, unowned հղումները չ են ընտրովի։ Դրանք ենթադրում են, որ օբյեկտը կշարունակի գոյություն ունենալ այնքան ժամանակ, որքան կա հղում։ Եթե փորձեք հասնել օբյեկտին unowned հղմամբ, երբ այն արդեն ազատ է արձակվել, ծրագիրը կկոտրվի։
    • Օգտագործվում են, երբ վստահ եք, որ կյանքի ցիկլը չի գերազանցում օբյեկտի կյանքի ցիկլը, որի վրա հղում է։ Վիզուալների կոնտեքստում դա ավելի քիչ տարածված է, քան weak։
    //Ամենայն հավանականությամբ less common for views, but possible
    unowned var childView: UIView
    
  4. Արrey և հավաքածուներ:

    • Վահանակների պահպանումը տեսքերին՝ Array, Dictionary կամ Set-ում, նույնպես ըստ默认 ստեղծում է հզոր հղումներ։
    var subviews: [UIView] = []
    

Ընտրությունը հզոր, անզոր կամ unowned հղում ընտրելու համար կախված է կոնկրետ օգտագործման սցենարից և օբյեկտների կյանքի ցիկլի կառավարմանց, որպեսզի կանխվի հիշողության լիքերը։ SwiftUI-ում տեսքերի կյանքի ցիկլի կառավարման գաղափարները մի փոքր տարբեր են, բայց UIKit-ի կոնտեքստում այս մեխանիզմները մնում են հիմնական մեթոդը հղումների պահպանումը։