شخصية كاريت بين الأنواع بدلاً من المتغيرات ، وتحيط بها الأقواس
-
28-09-2019 - |
سؤال
كنت أتجول في وثائق 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 آخر ، إلى كتلة مع معلمة منطقية واحدة وعدم أي شيء.