Sobes.tech
Intern

Nesneye erişilirse ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir nesneye mesaj gönder. Nesnenin karşılık gelen isimde (seçici) bir yöntemi varsa, o çalıştırılır. Yoksa, çalışma zamanında hata oluşur (tanınmayan seçici nesneye gönderildi), aksi takdirde nesne mesaj yönlendirme mekanizmasını uygular.

Objective-C/Swift'te mesaj yönlendirme mekanizması birkaç aşamadan oluşur:

  1. Dinamik dağıtım: Çalışma zamanı ortamı, nesnenin sınıfında ve üst sınıflarında bu seçici için yöntem uygulamasını (IMP) arar.
  2. Dinamik yöntem ekleme: Eğer uygulama bulunamazsa, çalışma zamanı +resolveInstanceMethod: (örnekler için) veya +resolveClassMethod: (sınıflar için) yöntemini çağırır, böylece sınıfa dinamik olarak yöntem uygulaması ekleme fırsatı verir.
  3. Mesaj yönlendirme: Eğer yöntem hala bulunamaz veya eklenemezse, çalışma zamanı mesajı başka bir nesneye yönlendirmeye çalışır, forwardingTargetForSelector: ve ardından methodSignatureForSelector: ve forwardInvocation: yöntemlerini çağırarak.

Bu adımların hiçbiri mesajı işlemezse, NSInvalidArgumentException istisnası oluşur.

Objective-C örneği:

@implementation MyObject

- (void)myMethod {
    // Yöntem uygulaması
    NSLog(@"myMethod called");
}

@end

// ...
MyObject *obj = [[MyObject alloc] init];
[obj myMethod]; // Mesaj gönder

Swift'te (varsayılan olarak) örnekteki gibi:

class MySwiftObject {
    func mySwiftMethod() {
        // Yöntem uygulaması
        print("mySwiftMethod called")
    }
}

let swiftObj = MySwiftObject()
swiftObj.mySwiftMethod() // Mesaj gönder (varsayılan dinamik dağıtım ile)

Swift'te nesne özelliklerine erişim, varsayılan olarak let ve var için statik dağıtım kullanır, @objc dynamic ile işaretlenmiş özellikler ise mesaj gönderimi gibi dinamik dağıtım kullanır.