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);
}