ماذا يعني هذا بناء الجملة ^ caret ^ ، مع الفراغ على كلا الجانبين؟ [مكرر

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

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

في iPhone SDK 4.0 ، UIApplication لديه طريقة جديدة ، setKeepAliveTimeout: يتطلب معلمة ثانية من النوع void(^)(void).

-(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void(^)(void))keepAliveHandler

ماذا يعني بناء جملة المعلمة الثانية بالضبط ، وكيف سأعلن وظيفة/معالج يمكنني المرور إليه؟

FWIW ما يلي ليس ما تبحث عنه ...

void SomeHandler( void )
{
}
هل كانت مفيدة؟

المحلول

إنها "كتلة" ، وهي ميزة جديدة تمت إضافتها إلى C في Snow Leopard. الكثير من المعلومات المتاحة على:

https://developer.apple.com/library/mac/documentation/cocoa/conceptual/blocks/articles/00_introduction.html

حظر الكائنات

الكائنات الحظر (بشكل غير رسمي ، "الكتل") هي امتداد لـ 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top