Obiectiv-C Care este metoda și sinele propriu-zis? + runtime +10
- 11/18/15 07:06 •
- ajjnix •
- # 270913
- Habrahabr •
- 4 •
- 5800
- la fel ca Forbes, doar mai bine.
Există metode de clasă, există metode de instanțe ale clasei. Să uităm temporar că clasa are metode, mai târziu ne vom întoarce cu siguranță la asta - deci va fi mai puțină confuzie la citirea articolului.
Nu vom acorda o atenție suplimentară modului în care metoda este căutată în Obiectiv-C, există articole adecvate pentru aceasta, chiar și Wikipedia este suficientă.
Deci, începem.
Metoda este căutată pentru tabela de expediere pentru ISA, care coboară. De aceea toate metodele din Obiectiv-C sunt virtuale, inclusiv private.
Și astfel putem să ne întoarcem la metodă, știind selectorul ei.
Cheia din tabela de expediere este SEL (selector, parsare detaliată) și valoarea IMP (implementare, cea mai comună funcție C)
Metoda este o funcție? Despre asta mai târziu.
Conform figurii, tabelul clasei copil nu include tabela de clasă părinte, ci folosește compoziția. Să verificăm în practică:
Obținerea clasei mesei de expediere
La începutul articolului am cerut să uit că clasa are metode și că obiectivul-C este un obiect. Deci, anulează-l.
Într-adevăr, o clasă este un obiect meta-clasă. El are propriile sale metode, propria sa masă de expediere, isa sa. De asemenea, are propriul punct de intrare (+ inițializator).
De asemenea, putem adăuga o metodă la clasă, așa cum am procedat și mai înainte. Cu excepția unui singur lucru, trebuie să obțineți o clasă de meta.
Demonstrație, o altă tabelă de expediere, folosind o meta-clasă
Apelarea unei metode ca o funcție