ماذا يعني هذا بناء الجملة ^ caret ^ ، مع الفراغ على كلا الجانبين؟ [مكرر
-
29-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
في iPhone SDK 4.0 ، UIApplication
لديه طريقة جديدة ، setKeepAliveTimeout:
يتطلب معلمة ثانية من النوع void(^)(void)
.
-(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void(^)(void))keepAliveHandler
ماذا يعني بناء جملة المعلمة الثانية بالضبط ، وكيف سأعلن وظيفة/معالج يمكنني المرور إليه؟
FWIW ما يلي ليس ما تبحث عنه ...
void SomeHandler( void )
{
}
المحلول
إنها "كتلة" ، وهي ميزة جديدة تمت إضافتها إلى C في Snow Leopard. الكثير من المعلومات المتاحة على:
حظر الكائنات
الكائنات الحظر (بشكل غير رسمي ، "الكتل") هي امتداد لـ C ، وكذلك الهدف-C و C ++ ، مما يجعل من السهل على المبرمجين تحديد وحدات العمل المستقلة ذاتياً. تشبه الكتل - ولكنها أقوى بكثير من مؤشرات الوظيفة التقليدية. الاختلافات الرئيسية هي:
يمكن تعريف الكتل مضمونة ، على أنها "وظائف مجهولة". تلتقط الكتل نسخًا للقراءة فقط من المتغيرات المحلية ، على غرار "عمليات الإغلاق" بلغات أخرى ، يعد هذا النوع من الوظائف أمرًا شائعًا في اللغات المفسرة ديناميكيًا ، ولكن لم يكن متاحًا على نطاق واسع لمبرمجي C. نشرت Apple كلا من مواصفات لغات الكتل وتنفيذنا كمصدر مفتوح بموجب ترخيص MIT ، وأضاف دعم الكتل إلى GCC 4.2 و Clang ، وقدمها للنظر فيها كجزء من الإصدار التالي من لغة البرمجة C.
بناء الجملة
يشبه متغير الكتلة مؤشر دالة ، باستثناء سيارة إلكترونية ('^') بدلاً من النجمة ('*').
void (^my_block)(void);
نصائح أخرى
وسيبدو رمز هذه الوظيفة بالذات مثل:
[[UIApplication sharedApplication] setKeepAliveTimeout:5.0 handler:^{
NSLog( @"This is my timeout handler" );
}];
هذا يعني أنه يستغرق كتلة (من الكود ، ويعرف أيضًا باسم الإغلاق) انظر http://developer.apple.com/mac/articles/cocoa/introblocksgcd.htmlهذه جديدة في Objective-C لـ OSX 10.6 و iOS 4
يمكن أن يتم إخفاء الوظائف على النحو التالي.
#if NS_BLOCKS_AVAILABLE
- (void)foo;
#endif