Sobes.tech
Middle

Kompilyator çağırılması lazım olan metodu necə tapır?

sobes.tech Süni İntellekt

AI-dan cavab

Tərcüməçi, metod çağırışını işləyərkən:

  • Sinifdə və onun supersiniflarında metodun təyinatının olub-olmadığını yoxlayır.
  • Statik tip təyin etmə (kompilyasiya zamanı) vasitəsilə, mümkün olarsa, hansı metodun çağırılmalı olduğunu müəyyən edir.

İcrada:

  • Dinamik yönləndirmə mexanizmi istifadə olunur.
  • Obiekt öz sinfinə işarəçi saxlayır.
  • Sinif yönləndirmə cədvəli (method dispatch table), və ya vtable C++/Objective-C-də, və ya Swift-də method table saxlayır.
  • Cədvəl metodların tətbiqlərinə işarəçilər ehtiva edir.
  • Metod çağırıldıqda, icra mühiti obyektdən sinfinin yönləndirmə cədvəlində uyğun qeydi selector adından (Objective-C-də) və ya metod imzasından (Swift-də, virtual metodlar üçün) axtarır.
  • Tapıldıqda, metod tətbiqinə işarəçi çağırılır.

Objective-C-də bu belə görünür:

// Objective-C-də metod çağırış nümunəsi
// [target messageName:parameter];
// Runtime 'messageName:'-i 'target'.class-dəki yönləndirmə cədvəlində axtarır

Swift-də:

// Swift-də metod çağırış nümunəsi
// instance.methodName(parameter)
// Tipə (final class, struct, protocol, dinamik) görə
// statik və ya dinamik yönləndirmə (vtable və ya message dispatch) istifadə olunur.

Swift-də yönləndirmə növləri:

Növ Yönləndirmə Optimizasiya
struct, enum Statik Kompilyator dəqiq metodu bilir
final class Statik Kompilyator dəqiq metodu bilir
class (final olmayan) Virtual Cədvəl vasitəsilə (vtable)
protocol ( @objc olmayan) Virtual Protokol şahid cədvəli vasitəsilə
@objc (class, protocol) Dinamik Objective-C runtime vasitəsilə (message dispatch)