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:
- Dinamik yönləndirmə: İcranın mühitində obyektin sinfi və onun supersiniflərində bu seçici üçün metodun (IMP) tapılması.
- 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. - 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ə sonramethodSignatureForSelector:və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ş let və var üçü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.