Sobes.tech
Intern

Obyektdən istifadə edilərsə nə baş verər?

sobes.tech Süni İntellekt

AI-dan cavab

Obyektdə mesaj göndərin. Əgər obyektin müvafiq ad (seçici) ilə metodları varsa, onlar icra olunacaq. Əks halda, icra zamanı xəta baş verəcək (tanınmayan seçici nümunəyə göndərildi), əgər obyekt mesajların yönləndirilməsi mexanizmini həyata keçirmirsə.

Objective-C/Swift-də mesajların yönləndirilməsi mexanizmi bir neçə mərhələdən ibarətdir:

  1. Dinamik yönləndirmə: İcranın mühitində obyektin sinfi və onun supersiniflərində bu seçici üçün metodun (IMP) tapılması.
  2. Dinamik metod əlavə etmə: Əgər metod tapılmayıbsa, icra mühiti +resolveInstanceMethod: (nümunələr üçün) və ya +resolveClassMethod: (sinflər üçün) metodunu çağırır, bu sinfə metodun dinamik əlavə olunmasına imkan verir.
  3. Mesajların yönləndirilməsi: Əgər metod hələ tapılmayıb və ya əlavə olunmayıbsa, icra mühiti mesajı başqa obyektə yönəltməyə çalışır, forwardingTargetForSelector: və sonra methodSignatureForSelector:forwardInvocation: metodlarını çağırır.

Əgər bu mərhələlərin heç biri mesajın işlənməsinə səbəb olmursa, NSInvalidArgumentException istisnası baş verir.

Misal Objective-C-də:

@implementation MyObject

- (void)myMethod {
    // Metodun icrası
    NSLog(@"myMethod called");
}

@end

// ...
MyObject *obj = [[MyObject alloc] init];
[obj myMethod]; // Mesaj göndərilir

Misal Swift-də (qeyri-şərti):

class MySwiftObject {
    func mySwiftMethod() {
        // Metodun icrası
        print("mySwiftMethod called")
    }
}

let swiftObj = MySwiftObject()
swiftObj.mySwiftMethod() // Mesaj göndərilir (standart dinamik dispatch vasitəsilə)

Swift-də obyektin xüsusiyyətlərinə giriş letvar üçün @objc dynamic olmadan statik dispatch istifadə edir. Ancaq, əgər xüsusiyyət @objc dynamic kimi işarələnibsə, ona giriş də dinamik dispatch istifadə edəcək, Objective-C-də mesaj göndərmə ilə eynidir.