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:
- 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.
- 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. - 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ındanmethodSignatureForSelector:veforwardInvocation: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.