سؤال

أريد إعداد جدول إرسال طريقة وأتساءل عما إذا كان من الممكن إنشاء مؤشر إلى طريقة في الهدف - C (مثل المؤشر للعمل في ج). حاولت استخدام بعض وظائف وقت تشغيل الهدف إلى الأساليب التبديل بشكل حيوي ولكن المشكلة ستؤثر على جميع الحالات.

عندما أكون جديدا جدا على الهدف - ج، سيكون مثالا موضحا محل تقدير كبير.

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

المحلول

يتم استدعاء طرق الهدف selectorق، ويمثلها SEL نوع البيانات. إذا كان كائنك يرث من NSObject, ، يمكنك معرفة ذلك لأداء محدد (أي استدعاء طريقة) مثل هكذا:

SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];

هذا يفترض أن لديك طريقة محددة مثل:

-(void)doSomething:(MyObject*)arg;

يتم تعيين محددات SEL ثورات البيانات من خلال @selector الكلمة الأساسية، والتي تستغرق اسم الطريقة التي ترغب في الاحتفاظ بها. اسم الطريقة هو اسم الطريقة التي تجردت من جميع الحجج. علي سبيل المثال:

-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params

سيتم الرجوع إليها @selector(doSomething:withParams:).

نصائح أخرى

نعم! في الهدف - ج، تسمى مؤشرات الوظائف المحددين. إذا كان لديك طريقة محددة مثل هذا:

- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}

تم الإعلان عن المحدد مثل هذا:

@selector(myFunctionWithObject:otherObject:)

لإجراء محدد على كائن، يمكنك استخدام:

[object performSelector:@selector(myFunction)];

أو

[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];

يعد نوع بيانات المحدد مفيدا بشكل خاص المواضيع والمؤثرات، حيث يمكنك إرسال مؤشر ترابط وتزويده بالتأكيد إلى الرسالة التي ترغب في استدعاءها. إذا كنت بحاجة إلى إنشاء مجموعة من المحددين (أو جدول إرسال)، أو إذا كنت بحاجة إلى استدعاء محددات مع معلمات متعددة، فيمكنك استخدام فئة NSinvocation. يوفر غلافا للمحدد ويسمح لك بتحديد الحجج الفعلية.

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

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