Блоки на самом деле являются как типами C, так и типами Objective-C. Вы можете связать объекты с ними, используя API-интерфейсы среды выполнения objc, вы можете поместить их в коллекции ObjC и т. Д., И все же они все еще действительны в программах на языке C Это аккуратная хитрая работа по совместимости со стороны компилятора и пользователей среды выполнения :)
ел бы добавить функции, создав категорию для блоков Objective-C.
__block int (^aBlock)(int) = ^int( int n ){
if( n <= 1 ) return n;
return aBlock( n - 1 ) + aBlock( n - 2 );
};
Вместо того, чтобы просто позволить нормальный[aBlock copy]
, [aBlock retain]
, [aBlock release]
, [aBlock autorelease]
, Я мог бы сделать что-то вроде:
[aBlock mapTo:anArray];
Возможная категория
@interface UnknownBlockClass (map)
- (NSArray *)mapTo:(NSArray *)array_;
@end