Obyektdan foydalanilsa nima bo'ladi?
sobes.tech AI
AIdan javob
Xabar yuborish ob'ektga. Agar ob'ektda mos keladigan nom (seletor) bilan metod bo'lsa, u bajariladi. Aks holda, bajarilish xatosi yuzaga keladi (tan olinmagan selector ob'ektga yuborildi), agar ob'ekt xabarlarni yuborish mexanizmini amalga oshirmasa.
Objective-C/Swiftda xabarlarni yuborish mexanizmi bir nechta bosqichdan iborat:
- Dinamik taqsimot: Ishga tushirish muhit ob'ektning sinfi va uning superklasslarida ushbu selector uchun metod (IMP) ni qidiradi.
- Dinamik metod qo'shish: Agar metod topilmasa, ishga tushirish muhit
+resolveInstanceMethod:(namuna uchun) yoki+resolveClassMethod:(sinflar uchun) metodini chaqiradi, bu sinfga dinamik ravishda metodni qo'shish imkonini beradi. - Xabarlarni yuborish: Agar metod hali ham topilmasa yoki qo'shilmasa, ishga tushirish muhit xabarni boshqa ob'ektga yuborishga harakat qiladi,
forwardingTargetForSelector:va keyinmethodSignatureForSelector:vaforwardInvocation:metodlarini chaqiradi.
Agar bu bosqichlarning hech biri xabarni ishlov berishga olib kelmasa, NSInvalidArgumentException istisnosi yuzaga keladi.
Misol Objective-C da:
@implementation MyObject
- (void)myMethod {
// Metodning amalga oshirilishi
NSLog(@"myMethod called");
}
@end
// ...
MyObject *obj = [[MyObject alloc] init];
[obj myMethod]; // Xabar yuborish
Misol Swift (noaniq):
class MySwiftObject {
func mySwiftMethod() {
// Metodning amalga oshirilishi
print("mySwiftMethod called")
}
}
let swiftObj = MySwiftObject()
swiftObj.mySwiftMethod() // Xabar yuborish (standart dinamik taqsimot orqali)
Swiftda ob'ektning xususiyatlariga kirish let va var uchun @objc dynamic bo'lmagan holda statik taqsimotni ishlatadi. Ammo, agar xususiyat @objc dynamic bilan belgilangan bo'lsa, unga kirish ham dinamik taqsimotni ishlatadi, Objective-C da xabar yuborish bilan o'xshash tarzda.