سؤال

أنا أعلم نفسي Objective-C كمتعة مذنب ، إذا كنت كذلك. لدي فهم قوي من لغة جافا ، لذلك ليس صعب للغاية الانتقال - من المؤكد أنه ممتع رغم ذلك. لكن للأسف ، سؤالي!

أحاول إعادة إنتاج شيء موجود في PHP: الربط الثابت المتأخر. في PHP ، يمكنني تزيين استدعاء طريقة مع "Static ::" ، والتي ستربط هذه الطريقة ديناميكيًا للمتصل في وقت التشغيل. من ناحية أخرى ، إذا تم استخدام الكلمة الرئيسية "Self ::" ، فإن الربط ثابت ويرتبط بالفئة التي يقيم فيها ، بغض النظر عن فئة الطفل التي يطلق عليها.

في OBJ-C ، أواجه صعوبة في إعادة إنتاج هذا النموذج. لقد سألت Overlord ، Google ، كيف تتأخر عن الربط الثابت في الكاكاو ، لكنني لا أعتقد أن هذا ممكن. قد يطلق عليه شيء آخر ، أو قد يتطلب حلًا كبيرًا للغاية. هذا ما أفعله الآن:

طريقة فئة الوالدين:

-(id) whoAmI {
 return ([self class]);
}

فئة الطفل ، childclass ، يمتد ParentClass ولا تتجاوز طريقة مثيل Whoomi.

NSLog(@"Calling from PARENT: %@", [parent whoAmI]);
NSLog(@"Calling from CHILD: %@", [child whoAmI]);

عندما أرسل الرسالة إلى كل من كائنات الفئة ، يقوم الربط الديناميكي بما يفترض أن تفعله ، وأحصل على ما يلي من NSLog ():

2010-09-21 11: 39: 07.484 WWHAMI [4803: A0F] الاتصال من الوالد: الوالد
2010-09-21 11: 39: 07.486 WWHAMI [4803: A0F] الاتصال من الطفل: طفل

في النهاية ، أريد أن أتعلم - إن أمكن - كيفية الحصول على الكاكاو للتوقف عن الربط ديناميكيًا بحيث تُرجع طريقة Wwhami دائمًا الكائن الذي يتواجد فيه (الوالد دائمًا). أريد أيضًا أن تكون طريقة مثيل. كيف لي أن تذهب عن القيام بذلك؟

-ال

هل كانت مفيدة؟

المحلول

في الواقع ، يحتوي الهدف C على مجموعة قوية من ميزات الاستبطان ، ومن المؤكد أنه من الممكن تقريبًا القيام بما تريد من خلال الإشارة إلى Apple الواسعة توثيق وقت التشغيل الهدف C. هذا هو واجهة برمجة تطبيقات C كاملة للوصول إلى الأعمال الداخلية لكائن وتسلسل الفئة الهدف C.

إذا لم يكن هناك شيء آخر ، من خلال تجربة هذه الأشياء ، فسوف تتعلم الكثير عن كيفية عمل اللغة ويجب أن تساعدك في تصحيح المشكلات الصعبة.

نصائح أخرى

قم بتغيير طريقة دمج اسم الفئة الأصل (أو الطبقة الفائقة):

-(id) whoAmI {
 return ([Parent class]);    //In this instance, Parent is the superclass
}

يحدث فقط أن ما تمنيت إنشاءه كان يجب إحداثه من خلال ربط رسالتي الصفية بشكل ثابت إلى فئة الوالدين نفسها: الوالد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top