1。 Block用法:
一般是用来表示、简化一小段的程式码,适合用来建立一些同步执行的程式片段、封装一些小型的工作或是用来做为某一个工作完成时的回传呼叫(callback) 。
2。作为独立的代码块使用
returnType ( ^blockName ) (paramType1, paramType2) = ^ (paramType1 paramName1 , paramType2 paramName2 ) { .... } ;
当返回为空时可用 void ,当无参数时可用 void
e.g.
NSInteger (^subtract ) (NSInteger , NSInteger ) = ^ ( NSInteger paramValue , NSInteger paramFrom ) {
return paramFrom - paramValue ;
}; // 调用:NSInteger result = subtract (10 , 25) ;
void (^simpleBlock ) ( void ) = ^ {
。。。。。
};
NSString* (^intToString) (NSUInteger) = ^ (NSUInteger paramInteger) {
NSString *result = [NSString stringWithFormat:@"%lu",
return result;
}; // 调用:NSString *string = intToString(10) ;
3。 作为参数
声明:typedef returnType ( ^blockName ) (paramType1 paramName1 , paramType2 paramName2 ) ;
定义:blockName customBlock = ^ (paramType1 paramName1 , paramType2 paramName2 ) { .... } ;
e.g.
typedef NSString* (^IntToStringConverter) (NSUInteger paramInteger) ;
IntToStringConverter inlineConverter = ^ (NSUInteger paramInteger) {
NSString *result = [NSString stringWithFormat:@"%lu", (unsigned long)paramInteger];
return result; };
- (NSString *) convertIntToString : ( NSUInteger ) paramInteger usingBlockObject : ( IntToStringConverter ) paramBlockObject {
return paramBlockObject (paramInteger) ;
}
- (void) doTheConversion{
NSString *result = [self convertIntToString:123 usingBlockObject: intToString];
NSLog(@"result = %@", result);
}
// 内联参数 (匿名函数,运行时创建构造)
。。。。 [ ^returnType (paramType1 paramName1 , paramType2 paramName2 ) { 。。。。 } ; ] //返回为空,则void可省略
e.g. 以下是最常用的形式
- (void) doTheConversion {
NSString *result = [self convertIntToString:123 usingBlockObject: ^ NSString * (NSUInteger paramInteger) {
NSString *result = [NSString stringWithFormat:@"%lu", (unsigned long)paramInteger];
return result;
}] ;
NSLog(@"result = %@", result);
}