شخصية كاريت بين الأنواع بدلاً من المتغيرات ، وتحيط بها الأقواس

StackOverflow https://stackoverflow.com/questions/3079624

سؤال

كنت أتجول في وثائق Apple ورأيت شيئًا كهذا (void (^)(void)). هل يمكن لأحد أن يشرح ماذا يعني هذا البيان؟ ^ هل xor ، أليس كذلك؟ void XOR void لا معنى له بالنسبة لي؟

كان هناك أيضا شيء مثل (void (^)(BOOL finished))

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

المحلول

هذه هي الكتل التي تضيف وظائف مجهولة وكائنات الوظائف إلى الهدف-C. انظر على سبيل المثال إدخال الكتل و Grand Central Dispatch :

الكائنات الحظر (بشكل غير رسمي ، "الكتل") هي امتداد لـ C ، وكذلك الهدف-C و C ++ ، مما يجعل من السهل على المبرمجين تحديد وحدات العمل المستقلة ذاتياً. تشبه الكتل - ولكنها أقوى بكثير من مؤشرات الوظيفة التقليدية. الاختلافات الرئيسية هي:

  • يمكن تعريف الكتل مضمونة ، على أنها "وظائف مجهولة".
  • الكتل التقاط نسخ للقراءة فقط من المتغيرات المحلية ، على غرار "الإغلاق" بلغات أخرى

إعلان متغير كتلة:

void (^my_block)(void);

تعيين كائن كتلة له:

my_block = ^(void){ printf("hello world\n"); };

استدعاءها:

my_block(); // prints “hello world\n”

قبول كتلة كحجة:

- (void)doSomething:(void (^)(void))block;

باستخدام هذه الطريقة مع كتلة مضمنة:

[obj doSomeThing:^(void){ printf("block was called"); }];

نصائح أخرى

هذا الكتلة, ، امتداد خاص بـ Apple لـ C ، على غرار مؤشرات الوظائف ، أو كائنات الوظائف بلغات أخرى.

(void (^)(void)) يبدو وكأنه typecast إلى نوع الكتلة التي لا تأخذ أي معلمات ولا تعيد أي شيء. بصورة مماثلة، (void (^)(BOOL finished)) يبدو وكأنه typecast آخر ، إلى كتلة مع معلمة منطقية واحدة وعدم أي شيء.

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