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) |