Sobes.tech
Middle

Derleyici nasıl çağrılması gereken yöntemi bulur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Derleyici, bir yöntem çağrısını işlerken:

  • Sınıf ve üst sınıflarında yöntem tanımının olup olmadığını kontrol eder.
  • Statik tip belirleme (derleme zamanında) yoluyla, mümkünse, hangi yöntemin çağrılması gerektiğini belirler.

Çalışma sırasında:

  • Dinamik yönlendirme mekanizması kullanılır.
  • Nesne, kendi sınıfına işaretçi tutar.
  • Sınıf, yönlendirme tablosu (method dispatch table) veya C++/Objective-C'de vtable, Swift'te ise method table tutar.
  • Tablo, yöntem uygulamalarına işaretçiler içerir.
  • Yöntem çağrıldığında, çalışma ortamı, nesnenin sınıfındaki yönlendirme tablosunda, seçici adı (Objective-C'de) veya yöntem imzasına (Swift'te, sanal yöntemler için) göre uygun kaydı arar.
  • Kaydı bulduğunda, yöntemin uygulamasına işaret eden gösterici çağrılır.

Objective-C'de bu şöyle görünür:

// Objective-C'de yöntem çağrısı örneği
// [target messageName:parameter];
// Çalışma zamanı, 'messageName:''yi 'target'.class'daki yönlendirme tablosunda arar

Swift'te:

// Swift'te yöntem çağrısı örneği
// instance.methodName(parameter)
// Türüne bağlı olarak (son sınıf, yapı, protokol, dinamik)
// statik veya dinamik yönlendirme (vtable veya message dispatch) kullanılır.

Swift'te yönlendirme türleri:

Tür Yönlendirme Optimizasyon
struct, enum Statik Derleyici, tam yöntemi bilir
final class Statik Derleyici, tam yöntemi bilir
class (final olmayan) Sanal Tablo (vtable) aracılığıyla
protocol ( @objc olmayan) Sanal Protokol tanık tablosu (protocol witness table) aracılığıyla
@objc (class, protocol) Dinamik Objective-C çalışma zamanı aracılığıyla (message dispatch)